Волшебство
программирования на 1С:Предприятие 7.7 и 8.0
Выпуск
15
/
10.11.2002
Здравствуйте! Сегодня
мы исследуем глубину проникновения объектно-ориентированного подохода при
программировании на 1С:Предприятие 8.0
В прошлом выпуске
рассылки нам удалось создать отчет с собственным реквизитом и
методом:
Отч =
Отчеты.ДолгиКлиента.Создать(); //создаем
экземпляр отчета
Отч.ВыбКлиент = ТекКлиент; //обращаемся к созданному нами
реквизиту
Отч.Сформировать(); //вызываем
написанный нами метод
Теперь попробуем
взглянуть на эту ситуацию другими глазами, с точки зрения
объектно-ориентированного программирования. Фактически мы создали класс
ДолгиКлиента, а затем обратились к его свойству и методу. То же самое
можно сделать со справочниками, документами и обработками. Таким образом
можно сказать, что версия 8.0 вносит нечто новое в обычное
программирование учетных задач, а фактически появляются элементы
объектно-ориентированного программирования, а именно
инкапсуляция.
Напомню, что
существует три основных механизма объектно-ориентированного
программирования:
- Инкапсуляция
(объединение свойств и методов в класс)
- Наследование
(отношения между классами, при котором дочерний класс наследует все
свойства и методы родительского класса)
- Полиморфизм
(возможность переопределения методов в дочерних классов, в результате
чего один и тот же метод, объявленный в родительском классе работает
по-разному в каждом дочернем классе)
Сейчас мы наблюдаем,
как 1С потихоньку осваивает инкапсуляцию. Причем чтобы определить класс
его нужно оформить каким-нибудь объектом конфигурации, например
обработкой. Пока нельзя написать где-нибудь в глобальном модуле
Класс Автомобиль
Экспорт
{
Реквизиты
......Цвет: тип
Цвет;
......МощностьДвигателя: тип
Число;
...
Методы
.......Поехали();
...
};
Авто = Новый
Автомобиль;
Тем не менее 1С
чуть-чуть опередила всех на полголовы. Справочники и документы - это
сохраняемые в базе классы. При этом документ характеризуется
номером, датой и временем, а справочник кодом и наименованием. Сохраняемые
в базе данных классы насколько я знаю только начинают осваиваться ведущими
разработчиками баз данных, например они только недавно появились в
последних версиях Oracle.
Предлагаю подумать над
реализацией наследования и полиморфизма в 1С на примере справочников и
документов. Например, есть справочник Контрагенты, от которого наследуется
справочники Фирмы (юридические лица, входящие в наш холдинг) и Банки.
Поскольку фирмы и банки суть контрагенты, то такое наследование вполне
обоснованно. Они будут наследовать все признаки контрагентов, такие как
ИНН, Юридический адрес и т.д. Кроме того, они будут иметь свои собственные
реквизиты и методы. Например, банк имеет БИК, корр. счет и т.д.. Фирма
имеет дополнительные свойства "Место в структуре холдинга", "Директор" из
спр. Сотрудники и т.д.
Было бы здорово, если
документы так же смогут наследовать свойства и методы друг друга.
Например, есть документ Продажа, от которого наследуются документы
РасходнаяНакладная, РасходнаяРеализатора и другие документы,
осуществляющие списание остатков товаров на коммерческой основе. У этих
документов будет общая часть модуля проведения, прописанная в документе
Продажа, а также свои особенности: дополнительные поля, экранные формы,
движения по другим регистрам и т.д. При этом родительский документ Продажа
может вообще не иметь экранной формы, а содержать только движения по
регистрам остатков товаров. Тогда он будет фактически абстрактным классом
и пользователь о нем никогда не узнает.
Для полной реализации
ООП в 1С необходимо иметь возможность создания классов в памяти, не
связанных с объектами конфигурации, как например, всем известные
СписокЗначений и ТаблицаЗначений. Эти объекты хранятся только в памяти и
не сохраняются в базе. Конечно, если только вы не примете дополнительные
меры, например сохраните их в реквизите справочника или в хранилище
значений.
Далее хочу
предостеречь ярых сторонников объектно-ориентированного программирования
от массы флейма по этому поводу. ООП полезно только для достаточно больших
и сложных проектов. Для небольших программ этот подход может только все
усложнить. Поэтому такая возможность была бы не лишней, но это не горит.
Существуют гораздо более насущные проблемы, чем введение ОО-подхода в
учетные системы.
Отмечу, что даже для
версии 7.7 относительно недавно появилась компонента 1С++, которая
позволяет использовать объектно-ориентированный подход в ваших программах
на 1С. Как говорится в документации, поддерживаются инкапсуляция,
наследование и полиморфизм. Подробнее об этой компоненте вы можете
прочитать здесь.
Внимание! Любая информация, опубликованная в данной
рассылке, не является гарантированно достоверной и может не совпадать с
официальным релизом 1С:Предприятие 8.0.
Официальный сайт
рассылки www.mista.ru
Архив
выпусков рассылки находится здесь
http://www.mista.ru/subscribe
С
уважением,
Волшебник Станислав
stasmit@mail.ru
<< Предыдущий
выпуск | Список
выпусков |
Следующий выпуск >>
|