Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Волшебство программирования на 1С:Предприятие 7.7 Выпуск 13


Информационный Канал Subscribe.Ru

Волшебство программирования на 1С:Предприятие

Здравствуйте! Поступило много откликов на планы рассылки по публикации наших мыслей о новой версии 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://subscribe.ru/archive/comp.soft.prog.magic1c

С уважением,
Волшебник Станислав

stasmit@mail.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное