Я своих молодых сотрудников приучаю сразу создавать объекты, максимально адаптированные к клиент-серверному варианту работы. К тому же это помогает при разборе функционала.
Приведу простой пример. Поставлена задача написать обработку (назовем ее «ОстаткиТоваров»), которая выведет в таблицу значений остатки товаров на складах на указанную дату.
Что делает начинающий?
Рисует форму, располагает на ней поле ввода с типом «Дата», таблицу значений и кнопку «Сформировать».
Что в результате имеем?
В обработчике КнопкаСформироватьНажатие() сначала у элемента формы «ДатаНачала» получаем значение, чуть ниже описываем текст запроса, передаем в него параметр, выполняем запрос и выгружаем его результат в таблицу значений. Вреде бы все работает, без проблем.
Но! Допустим, что для какой-то другой задачи (назовем ее «СуперЗадача») тоже необходимо получать остатки по товарам на складах. Можно, конечно, скопировать основной функционал обработки «ОстаткиТоваров» и вставить его в «СуперЗадачу», подкорректировав, где это необходимо. Но можно ведь и просто использовать «ОстаткиТоваров»!
Для этого у обработки «ОстаткиТоваров» достаточно создать реквизит «ДатаОстатков», который связать с элементом формы, а функцию формирования таблицы значений вынести в модуль объекта, сделав экспортной.
Что это дает?
1. Наглядная структура объекта. По реквизитам обработки сразу видны ключевые параметры. В модуле формы описаны интерфейсные функции и обработчики событий, а в модуле объекта — собственно сам функционал.
2. Доступ к необходимым параметрам из модуля формы и модуля объекта напрямую, без использования конструкции ЭлементыФормы.МойРеквизит.Значение и/или глобальных переменных объекта.
3. Доступ к функционалу объекта без необходимости получения его формы.
4. При запуске в клиент-серверном варианте в 90 случаях из 100 обработка будет корректно работать (про передачу мутабельных значений между сервером и клиентом расписывать не буду, это отдельная тема).
Почему я это все написал? Потому что, когда я открываю чью-то разработку, мне первым делом интересен метод решения задачи, который (несомненно) описан в модуле объекта. Ан нет… Модуль объекта девственно чист, приходится лазить по модулю формы и вычленять функционал из кучи процедур типа «ДатаПриИзменении».
Так что, в принципе, можно считать это криком души 🙂