Улучшение стандарта "Структура модуля"
Разработка - Математика и алгоритмы
Стандарт фирмы 1С "Структура модуля" содержит в себе рекомендации о перечене и составе элементов разделов на которые предлагается разделить программный модуль. Само требование о разделении кода модуля на разделы призвано повысить читаемость кода и упростить внесение изменений в код разными авторами (разработчиками) как при коллективной разработке, так и при доработке прикладных решений на конкретных внедрениях. За туманными выражениями "повысить читаемость" и "упростить внесение изменений" теряется настоящая цель - снижение сложности системы.
В этой небольшой статье я попытаюсь продемонстрировать более удачное применение областей модуля. Как мне представляется, на самом деле, требуется не повысить читаемость кода, а структурировать его, улучшить его понимаемость, и облегчить внесение изменений.
На мой взгляд, даже названия разделов неудачны, например:
- "ПрограммныйИнтерфейс" - интересно, а какой еще как не "Программный" он может быть в данном случае,
- "СлужебныеПроцедурыИФункции" - слишком длинно, к тому же в эту область можно включить вообще любую процедуру и функцию. Критерии считать функциональную единицу "служебной" или "не служебной", как правило, размыты.
- "ОбработчикиСобытийТаблицыФормы" - уснешь, пока дочитаешь до конца, проще и компактнее просто "События".
Предложенный подход не использует в полной мере возможности областей кода. Ведь можно создавать вложенные области. Более того, вложенные области могут иметь одинаковые имена, т.е. например мы можем создать область
#Область Таблицы
#Область Запасы
#Область Команды
#КонецОбласти
#КонецОбласти
#Область Услуги
#Область Команды
#КонецОбласти
#КонецОбласти
#КонецОбласти
Вот какие разделы рекомендуется использовать.
Для модуля формы:
#Область Форма
#КонецОбласти
#Область Элементы
#КонецОбласти
#Область Таблицы
#Область <ИмяТаблицы>
#Область Команды
#КонецОбласти
#КонецОбласти
#КонецОбласти
#Область Команды
#КонецОбласти
#Область Оповещения
#КонецОбласти
#Область Подключаемые
#КонецОбласти
#Область Методы
#Область НаКлиенте
#КонецОбласти
#Область НаСервере
#КонецОбласти
#КонецОбласти
В разделе "Форма" собираются все обработчики событий формы.
В разделе "Элементы" собираются все обработчики событий элементов формы (кроме таблиц и табличных полей).
В разделе "Таблицы" собираются обработчики событий всех таблиц формы. При необходимости в область таблицы можно добавить вложенную область "Команды" и включить в нее все команды относящиеся к таблице.
В разделе "Оповещения" собираются все оповещения о событиях формы.
В разделе "Подключаемые" указываются все подключаемые процедуры и функции формы.
В разделе "Методы" собираются все остальные процедуры и функции. В исходном варианте он содержит вложенные области по директивам компиляции, соответственно "НаКлиенте", "НаСервере". Вначале были еще и области "НаСервереБезКонтекста", "НаКлиентеНаСервереБезКонтекста", но согласно стандарта "Правила создания общих модулей" не рекомендуется определять модули одновременно для клиента и для сервера. Здесь принцип такой же. По сути в модуле формы, с помощью областей определяются клиентская и серверная часть формы. Общий модуль, да может быть смешанным, но в этом случае, это скорее получается некий пакет связанного функционала, который должен уметь работать и на клиенте и на сервере.
Исходный замысел был в том чтобы разделить логику модуля на клиентскую и серверную части соответственно, однако, естественно, при увеличении объема кода, принятый набор областей перестанет справляться со сложностью. В этом случае, я переразбиваю функции, добавляя область "Пакеты", и уже в ней указываю вложенные области, группируя функции. Например:
#Область Пакеты
#КонецОбласти
Хотя появление этой области, скорее говорит о том что функционал формы перегружен. Впрочем, для каких-то сложных обработок, это может быть применимо.
Для модуля объекта:
#Область Интерфейс
#КонецОбласти
#Область События
#КонецОбласти
#Область Методы
#КонецОбласти
Для общего модуля (и для модуля менеджера):
#Область Интерфейс
#КонецОбласти
#Область Методы
#КонецОбласти
Специальные предложения
См. также
Регистры бухгалтерии. Общая информация 111
05.09.2019 6702 YPermitin 22
"Хочу универсально!" [Часть 1] 65
02.09.2019 4902 SeiOkami 35
Иерархия без "В ИЕРАРХИИ" 117
22.08.2019 4913 ildarovich 16
EnterpriseData – часть 3. Загрузка данных, идентификация объектов 62
22.08.2019 4231 ids79 7
Обработчики событий при записи объектов. Зачем и что за чем? 202
25.07.2019 12802 4 AlbinaAAA 23
Как проводятся документы в типовых конфигурациях от 1С 137
24.07.2019 16075 skv_79 32
FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются... 8
24.07.2019 2864 vandalsvq 16
Управление качеством кода 136
22.07.2019 8234 Stepa86 29
Что делает "В ИЕРАРХИИ" в запросе? 94
16.07.2019 8185 YPermitin 34
Создание отчетов с помощью СКД - основные понятия и элементы 208
25.06.2019 20986 ids79 17
Реализуем Стек, Очередь и Приоритетную очередь в 1С 52
24.06.2019 7804 RonX01 63
Организация хранения промежуточных данных 3
29.05.2019 1954 scientes 1
Вычисление 200 тысяч знаков числа pi 73
28.05.2019 3984 Oleg_nsk 93
Регистры накопления. Виртуальные таблицы. Часть №1: Обороты 84
20.05.2019 11077 YPermitin 5
Даем названия переменным: как префиксы экономят наше время 10
06.05.2019 3214 Designer1C 69
Заметки по SQL: Срез последних - аналог запроса 15
15.01.2019 6319 IVC_goal 5
Разработка и сценарное тестирование с Vanessa-ADD. Концепция, теория и сквозной пример создания сценария 222
09.01.2019 27568 Vladimir Litvinenko 69
Многопоточное восстановление последовательностей 41
05.12.2018 7250 _ASZ_ 29
Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С 127
10.11.2018 22251 ids79 40
Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C 147
23.08.2018 22874 Rain88 42
Теорема номер тринадцать 15
15.03.2018 9358 vasilev2015 24
Введение в CI для 1С 87
21.11.2017 19332 real_MaxA 22
Как работает серверный вызов в 1С 459
18.11.2017 44247 pahich 77
#Область ВНЕШНИЕ_ВЫЗОВЫ или MVC в 1С, библиотечность и упрощение интеграции кода 43
12.10.2017 14810 for_sale 58
Групповая разработка конфигураций в крупном холдинге 68
15.08.2017 17545 stas_ganiev 15
Автоматизация процесса 1С-разработки 91
07.06.2017 23029 ekaruk 9
Пишем игру Минер. Обработка событий ActiveX в 1С 29
29.05.2017 12732 user621724_Dimav1979 11
Как я доступ на kb.1c.ru получал 91
01.05.2017 22536 ikekoval 33
"Распределение в запросе" или "избавляемся от перебора" 185
16.12.2016 28632 alexandersh 48
Планы обмена. Квитировать или гарантировать? 24
12.12.2016 14558 zhichkin 9
Некоторые принципы оптимизации запросов 1С (+SQL) 115
17.11.2016 8898 ture 40
Использование git для доработки типовых конфигураций 1С 230
11.10.2016 188461 pumbaE 31
Оптимизация запросов 1С:Предприятие – от теории к практике 116
07.10.2016 32082 bpc222 20
Регистры сведений 1С. Как это устроено. 729
05.08.2016 151050 Sergey.Noskov 155
Переводим расширения на 8.3.8. Памятка. 79
29.07.2016 39712 mrXoxot 12
Подобие Объектно-ориентированного программирования в 1С (ПООПс) 12
24.07.2016 10917 adam26 54
Опыт практического применения методики BDD на 1С. Написание сценариев 121
03.07.2016 20336 oleynik.dv 132
Заметки про запросы. Последовательность. 110
27.05.2016 29631 vasilev2015 31
Оптимизация планирования доставки грузов. Алгоритм кластеризации k-means (метод K-средних). 26
10 стартмани
09.02.2016 26528 mi1man 4
Контур.EDI изнутри, или история командной разработки тиражного продукта на 1С 174
17.11.2015 36045 skif47 88
Порядок записи движений регистров при проведении документа 95
13.11.2015 80529 triton_tver 8
Три способа получить дерево элементов иерархического справочника 52
11.11.2015 63126 32ops 9
Распределение суммы по базе 48
08.11.2015 27732 starik-2005 19
Мультиинструментальный Brute Force 4
30.10.2015 10443 scientes 4
1С с "плюсами" 74
14.10.2015 19971 IntelInside 47
Знакомство с технологией Automation-сервер на примерах 33
28.09.2015 26193 niko11s 10
Критерии отбора 83
24.09.2015 49480 niko11s 13
По ссылке или по значению? Ключевое слово Знач и с чем его едят 196
12.08.2015 37187 Evil Beaver 239
Приемы обработки больших данных в 1С 258
07.08.2015 60324 tormozit 27