Волшебство
программирования на 1С:Предприятие 7.7 и 8.0
Выпуск
13
/
30.10.2002
Здравствуйте!
Поступило много откликов на планы рассылки по публикации наших мыслей о
новой версии 1С:Предприятие 8.0. В этом и нескольких следующих выпусках мы
обсудим возможности новой версии 1С:Предприятие. Уже сейчас видно
невооруженным глазом, что всем профессионалам версии 7.7 придется
кардинально переучиваться. Хотя фирма 1С обещает некоторую преемственность
в части основных понятий и даже некий чудесный конвертер, но версия 8.0
является фактически новым языком программирования. Изменится сам стиль
программирования на 1С, и я надеюсь, что в лучшую сторону.
Краткие сведения об
ознакомительной версии 1С:Предприятие 8.0, взятые из официального
пресс-релиза фирмы 1С, вы можете прочитать здесь http://www.mista.ru/tutor_1c/about8.htm. Эти сведения
будут интересны разработчикам, знакомым с версией 7.7.
В данном выпуске мы
обсудим понятие "контекст". Вообще слово контекст обозначает
окружение, т.е. среда, окружающий мир, в котором выполняется программный
код. Программный код всегда выполняется в определенном контексте.
Существуют следующие виды контекстов:
- Глобальный
контекст
- Контекст объекта
конфигурации
- Контекст
формы
- Локальный контекст
процедуры или функции
В версии 8.0 будут
добавлены так называемые общие модули, которые также имеют свой
собственный контекст.
Всегда нужно понимать,
в каком контексте вы работаете в данный момент. От этого зависит, какие вы
можете вызвать процедуры и функции, к каким переменным вы имеете доступ,
можете ли вы обратиться к реквизитам справочников, документов и
т.д.
Любой программный
модуль конфигурации (кроме общих модулей) имеет доступ к
глобальному контексту, который включает в себя все ключевые слова
языка, системные переменные, системные перечисления, а также переменные,
процедуры и функции, объявленные в глобальном модуле с ключевым словом
Экспорт.
Обратите внимание, что
в 8.0 общие модули не могут иметь объявлений переменных на уровне модуля.
Кроме того общий модуль не имеет доступа к переменным, процедурам и
функциям глобального модуля, даже если они объявлены с ключевым словом
Экспорт. Таким образом общий модуль является "вещью в себе" и
предоставляет внешнему миру свои процедуры и функции.
Заметим, что в
современных языках программирования механизм библиотечных модулей
разработан гораздо более глубоко. В частности, процедуры и функции можно
связать в класс. У класса могут быть атрибуты (properties) с различными
областями видимости (public, protected, private) и правами доступа
(read-only, read-write). Классы могут наследоваться друг от друга, включая
множественное наследование. Классы могут объединяться в пакеты/библиотеки
и в таком виде распространяться, подключаться к программам. Более того
технология COM позволяет распространять объект в двоичном виде, т.е.
объект сохраняет свою объектную природу не только на уровне исходных
текстов, но и на этапе выполнения. Все эти фенечки недоступны
программистам 1С, и мы часто вынуждены довольствоваться объедками с
барского стола.
В версии 8.0 введены
подсистемы, но к ним нельзя обращаться из языка, экспортировать и
импортировать их, у подсистем нет собственных модулей. В первом релизе 8.0
будет возможность создавать вложенные подсистемы, можно будет
разрабатывать интерфейсы и назначать права доступа на основе подсистем. Но
этого мало! Я считаю, понятие подсистемы должно быть разработано более
глубоко. Подсистема должна иметь свой модуль, свои реквизиты и табличные
части, встроенные свойства и методы. Тогда она будет иметь свой контекст и
ее полезность возрастет многократно.
В версии 8.0
планируется расширить понятие контекста. В частности, в контекст будут
входить не только реквизиты и встроенные методы объекта, но также
процедуры и функции, написанные программистом и помещенные в модуль
объекта (не путать с модулем формы). Этот механизм дает дополнительную
свободу программисту и позволяет, например, решить типичную проблему
печати документов разных видов из других модулей конфигурации. Например,
требуется напечатать Приходный кассовый ордер из различных документов. При
этом хотелось бы иметь только один бланк приходника и одну процедуру его
формирования.
В версии 7.7 проблема
печати разных документов решалась вынесением печатных форм и процедуры
печати в общие таблицы и глобальный модуль или в отдельный
отчет/обработку. Кроме того, есть второй способ, относимый мною к
извращениям: открыть форму документа, передав ей параметр типа
"НапечататьИЗакрыть". В модуле формы в процедуре ПриОткрытии
проанализировать этот параметр, напечатать себя и закрыть свою форму.
Конечно, работает, но все это выглядит коряво,
"неаккуратненько".
Для решения этой
проблемы в 8.0 в каждом модуле документа можно будет написать процедуру
Печать. При этом она теперь будет входить в контекст документа данного
вида наравне со встроенными методами. Из любого другого модуля можно
написать Накладная.Печать() или СчетФактура.Печать(). При этом каждый
документ будет напечатан по-своему на собственном печатном бланке.
Другие применения
данного механизма предлагаю придумать вам самостоятельно. Не забудьте
поделиться своими идеями с читателями рассылки. Вполне возможно, что
именно ваша идея будет реализована разработчиками фирмы 1С в ближайшей или
следующих версиях 1С:Предприятие.
Внимание! Любая информация, опубликованная в данной
рассылке, не является гарантированно достоверной и может не совпадать с
официальным релизом 1С:Предприятие 8.0.
Официальный сайт
рассылки www.mista.ru
Архив
выпусков рассылки находится здесь http://www.mista.ru/subscribe
С
уважением,
Волшебник Станислав
stasmit@mail.ru
<< Предыдущий
выпуск | Список
выпусков |
Следующий выпуск >>
|