Особенности написания обработок: в помощь начинающему

Часто бывает: скачал обработку с Инфостарта — хороша, все делает как надо, но вот если бы тут рюшечку добавить, было бы вообще чудесно. Открываем исходный код, и видим: ни реквизитов обработки, ни текста модуля объекта, все свалено в кучу в модуле формы.

Я своих молодых сотрудников приучаю сразу создавать объекты, максимально адаптированные к клиент-серверному варианту работы. К тому же это помогает при разборе функционала.

Приведу простой пример. Поставлена задача написать обработку (назовем ее «ОстаткиТоваров»), которая выведет в таблицу значений остатки товаров на складах на указанную дату.

Что делает начинающий?
Рисует форму, располагает на ней поле ввода с типом «Дата», таблицу значений и кнопку «Сформировать».
Что в результате имеем?
В обработчике КнопкаСформироватьНажатие() сначала у элемента формы «ДатаНачала» получаем значение, чуть ниже описываем текст запроса, передаем в него параметр, выполняем запрос и выгружаем его результат в таблицу значений. Вреде бы все работает, без проблем.

Но! Допустим, что для какой-то другой задачи (назовем ее «СуперЗадача») тоже необходимо получать остатки по товарам на складах. Можно, конечно, скопировать основной функционал обработки «ОстаткиТоваров» и вставить его в «СуперЗадачу», подкорректировав, где это необходимо. Но можно ведь и просто использовать «ОстаткиТоваров»!

Для этого у обработки «ОстаткиТоваров» достаточно создать реквизит «ДатаОстатков», который связать с элементом формы, а функцию формирования таблицы значений вынести в модуль объекта, сделав экспортной.

Что это дает?
1. Наглядная структура объекта. По реквизитам обработки сразу видны ключевые параметры. В модуле формы описаны интерфейсные функции и обработчики событий, а в модуле объекта — собственно сам функционал.
2. Доступ к необходимым параметрам из модуля формы и модуля объекта напрямую, без использования конструкции ЭлементыФормы.МойРеквизит.Значение и/или глобальных переменных объекта.
3. Доступ к функционалу объекта без необходимости получения его формы.
4. При запуске в клиент-серверном варианте в 90 случаях из 100 обработка будет корректно работать (про передачу мутабельных значений между сервером и клиентом расписывать не буду, это отдельная тема).

Почему я это все написал? Потому что, когда я открываю чью-то разработку, мне первым делом интересен метод решения задачи, который (несомненно) описан в модуле объекта. Ан нет… Модуль объекта девственно чист, приходится лазить по модулю формы и вычленять функционал из кучи процедур типа «ДатаПриИзменении».

Так что, в принципе, можно считать это криком души 🙂

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *