О пользе глупых вопросов, о вреде слепого применения стандартов кодирования
и совсем немного о глобальном модуле.
Рассматривал я как-то глобальный модуль, и обнаружил в нем забавную функцию:
// Функция возвращает переданное значение параметра (для получения Контекста)
Функция глВзятьКонтекст(Конт) Экспорт
Возврат Конт;
КонецФункции
И задумался я: А нужна ли она вообще? В каких случаях мы не можем использовать
непосредственно Контекст?
- Внутри самого модуля мы можем Контекст вообще не использовать - он нам доступен непосредственно.
- Если мы передаем Контекст в другой модуль - мы можем это сделать непосредственно, без участия переменной.
- Даже если мы хотим спрятать Контекст в список или таблицу значений - и тогда все работает отлично.
После трех часов удаления лишних вызовов этой функции, я, наконец, сообразил,
в каких случаях это неободимо.
Итак. Из модуля открываем некую форму, в нее в качестве параметра передаем текущий контекст, а после
открытия, в изначальном модуле нам нужен контекст открытой формы. Поскольку
контекст открытой формы возвращается в ту же переменную, что и передает параметры -
возникает некая коллизия. Тут использовать Контекст мы не можем, поскольку он не того типа
и поменять его не может :). Нужна переменная. Пример:
Парам=глВзятьКонтекст(Контекст);
ОткрытьФорму("Обработка.ХитраяОбработка",Парам);
Парам.Закрыть(); //Здесь может быть любое другое использование контекста формы
В этом случае мы не можем написать
ОткрытьФорму("Обработка.ХитраяОбработка",Контекст);
поскольку нам неоткуда будет взять контекст открытой формы.
Что характерно, после вызова ОткрытьФормуМодально() контекст открытой формы никогда не может быть
доступен, что в общем-то довольно логично. Однако из 125 случаев использования функции
глВзятьКонтекст() в моей конфигурации, 104 раза она использовалась именно в ОткрытьФормуМодально().
Единственным оправданием для такого идиотизма может быть только слепое следование
каким-то внутренним стандартам кодирования, принятым в 1С при написании типовых.
P.S.
Мне пришло несколько отзывов на эту статью. Основная масса возражений была на уровне "ну и насколько быстрее
стало работать?" и "работает - не трогай".
Так вот: всем, кому стало обидно за функцию глВзятьКонтекст() и за программистов любимых типовых конфигураций -
предлагаю подумать над простым вопросом: почему вы не используете конструкции вроде этой
Четыре = глВзятьКонтекст(2) + глВзятьКонтекст(2);
Сообщить(глВзятьКонтекст(Четыре));
?
|