Главная страница Visual 2000 · Общий список статей

"1С:Предприятие" как платформа разработки приложений

Андрей Колесов

© Андрей Колесов, 2000
Авторский вариант. Статья была опубликована c незначительной литературной правкой в журнале "КомпьютерПресс" (N 05/2000, с.151)

Эта статья является принцпиально важной. Для меня она открыла новое направление публикаций на тему технологий экономического софта фирмы "1С". Для фирмы "1С"... наверное, она тоже была важна: фактически, здесь впервые сделана попытка объяснить широкой аудитории основные идеи разработки приложений в среде "1С:Предприятие". По крайней мере, именно здесь впервые был применен термин "платформа"!
Появлению этой "новаторской" статьи, предшествовала длинная и непростая история.


Примечание. В статье говорится о платформе "1С:Предприятие" версии 7.7.

Начиная с середины 1997 года...

Начиная с середины 1997 года одной из постоянных тем наших статей (которые пишутся в соавторстве с Ольгой Павловой) стала "Разработка приложений в среде MS Office". Надо сказать, что сама постановка вопроса "Office как платформа разработки" большинству разработчиков казалась в те времена несколько парадоксальной. Сейчас это уже никого не удивляет, и дальнейшее развитие идеи макропрограммирования с использованием VBA и системы готовых объектов выглядит вполне естественно.

Однако в нашем обзоре "Интеграция VBA в бизнес-приложения независимых разработчиков" ("КомпьютерПресс" N 3'2000) мы отмечали два момента:

  1. Реализация внутреннего механизма настройки программ и включения в них дополнительных расширений является объективной тенденцией развития функциональности самых различных приложений.

  2. MS Office является далеко не единственной платформой макропрограммирования.

Собственные наборы инструментальных средств разрабатывают многие компании (причем не только для внутреннего применения, но и для коммерческого распространения), в том числе и российские. Среди последних в первую очередь нужно выделить фирму "1C", которая предлагает на рынке самую массовую после MS Office платформу макроразработки бизнес-приложений — "1С:Предприятие".

В представлении большинства российских компьютерных пользователей фирма "1С" является в первую очередь поставщиком коробочных программных продуктов для решения экономических задач предприятия (бухгалтерия, складской учет, кадры и пр.). Однако это не совсем верно — по мере развития своего бизнеса компания все в большей степени выступает в качестве разработчика инструментальной платформы, на базе которой партнеры и клиенты могут создавать собственные решения.

Итак, в этой статье не будет говориться о продуктах "1С" для конечного пользователя ("Бухгалтерия", "Торговля" и пр.). Здесь я просто попробую поделиться своими впечатлениями об инструментальной среде "1С:Предприятие" с точки зрения VB-программиста, никогда серьезно не занимавшегося разработкой и эксплуатацией экономических задач.

В начало статьи

Создание платформы

Говоря о механизмах внутреннего программирования приложений, можно условно выделить два уровня подобных технологий:

  1. Механизм, функционирующий в рамках базовых функций конкретного приложения (таковым, например, был в свое время WordBasic, который был изначально нацелен на специфику Word.)

  2. Механизм, позволяющий создавать эти базовые функции и разрабатывать приложения с принципиально новой функциональностью.

Внутренние средства программирования первого уровня для адаптации программ к задачам конкретного пользователя появились еще в самых первых версиях бухгалтерских программ "1С". В 1996 году фирма представила свою новую разработку "1С:Торговля", реализованную уже на новой технологической платформе, которая тогда носила название V7, а сегодня известна под торговой маркой "1С:Предприятие". И вот этот инструментарий можно смело отнести к средствам разработки второго уровня.

В начало статьи

Общая схема работы системы

После установки пакета "1С:Предприятие 7.7" (Профессиональная однопользовательская комплексная конфигурация) в системном меню появляется группа с четырьмя ключевыми программами системы: "1С:Предприятие", "Конфигуратор", "Монитор пользователей" и "Отладчик" (рис. 1). Пока нас будут интересовать только первые два приложения.

Рис. 1

Запустив "1С:Предприятие", мы увидим окно "Запуск", в котором необходимо выбрать необходимую для дальнейшей работы "Информационную базу" (рис. 2). Здесь нужно сделать важные замечания.

Рис. 2

Сама программа "1С:Предприятие" является программной средой, в которой функционирует некая макропрограмма, называемая "Конфигурацией". (В какой-то степени здесь уместна аналогия между средой VB и работающим в этой среде VB-проектом.) Таким образом конечный пользователь имеет дело именно с Конфигурацией, работающей в среде "1С:Предприятие" и полностью определяющей функциональность решаемых задач. Соответственно владелец пакета, имея в своем распоряжении эту инструментальную среду, может использовать готовые конфигурации, поставляемые "1С" или ее партнерами, модернизировать их (с учетом вопросов лицензирования и технической поддержки) или создавать свои собственные.

Физически "Конфигурация" хранится в виде специального файла-контейнера 1cv7.md. Тренировочная система "Учет основных средств", создаваемая в течение 5 дней слушателями учебных курсов, имеет размер конфигурации около 350 Кбайт. "Комплексная конфигурация", поставляемая "1С" (Бухгалтерия, Заплата и Кадры, Торговый и складской учет"), — почти 9 Мбайт.

"Информационная база", которую предлагается выбрать пользователю при запуске, является совокупностью "Конфигурации" и данных клиента. Поскольку у нас пока нет никаких данных, то фактически нам здесь предлагается выбрать конфигурацию, на основе которой мы будем строить собственную базу данных. Сейчас мы хотим познакомиться с технологией разработки, поэтому будет логично стартовать с нуля и создать просто новую информационную базу "Моя Тестовая База" (рис. 2). Однако в ответ на попытку начать работу с ней система выдаст сообщение "Ошибка загрузки метаданных" и завершит работу (хотя лучше было бы уточнить природу ошибки — отсутствие конфигурации).

Действительно, чтобы программа работала, ее нужно сначала, по крайней мере, написать (не говоря уже об отладке). В системе "1С" функции разработки и исполнения макропрограммы-конфигурации разнесены: "Предприятие" только исполняет заданную конфигурацию, а создается конфигурация, как легко догадаться, в приложении "Конфигуратор".

В начало статьи

Первое знакомство с "Конфигуратором"

Запустим программу "Конфигуратор" с нашей пока пустой конфигурацией "Моя Тестовая База" и в ней откроем окно "Конфигурация" (рис. 3).

Рис. 3

Там мы увидим три вкладки, которые отражают взаимосвязанные составные части конфигурации:

Попробуем пока разобраться с метаданными, которые определяют фунциональность конфигурации. Это понятие обозначает совокупность объектов, являющихся базовыми конструкциями создания рабочих конфигураций. По своей сути такие объекты являются предопределенным программным аналогом реальных объектов из сферы предметной деятельности предприятий (см. табл. 1).

Например, объект "Справочник" предназначен для ведения любых списков однородных данных: справочников, картотек и пр. По характеру своего содержания этот объект в какой-то степени соответствует понятию "Таблица" в таких базах данных, как Access, ForPro и пр. Однако на этом же примере видны и отличия в формировании и использовании объектов в системе "1С".

В данном случае разработчик фактически вообще не имеет дела с понятием "база данных" — все вопросы хранения информации, в том числе создания и коррекции файлов, решаются самим объектом. Таким образом, все объекты "1С Предприятия" принимают на себя как функции сохранения своих данных на внешних носителях, так и визуального представления информации в виде экранных диалогов (форм с набором визуальных элементов управления) и печатных документов. Кроме того, большинство объектов в качестве своего компонента включают модуль формы, содержащий программный код для выполнения нестандартных операций при работе с объектом — реализации конкретного алгоритма обработки диалога.

Однако то, что мы видим в окне "Конфигурация" при создании новой информационной базы, — это лишь список типов объектов, на основе которых мы можем создавать реальные объекты, предназначенные для конечного пользователя. (Если проводить сравнение с тем же VB, то это лишь панель инструментов, которые можно использовать для создания приложения.)

На рисунке 4 приведен небольшой фрагмент описания фирменной комплексной конфигурация "Бухгалтерия+Торговля+Склад+Зарплата+Кадры", на котором видна только часть реализованных в ней справочников.

Рис. 4

Обратите внимание, что там представлена и структура данных справочника "ДляАвтотранспорта". Еще один важный момент заключается в том, что все объекты "1С:Предприятия" объединены в группы — компоненты, отражающие их направленность на определенные предметные области: "Бухгалтерский учет", "Оперативный учет", "Расчет" (см. табл. 1). Разработчику доступны те компоненты, которые входят в состав приобретенного им варианта продукта.

В то же время имеется группа базовых объектов, которая используется во всех вариантах поставки. Их нам пока будет вполне достаточно для знакомства с работой "1С:Предприятия", тем более что с помощью таких объектов можно делать законченные приложения для решения достаточно широкого круга задач.

Кроме специализированных объектов, конфигурация содержит корневой объект, который в начальный момент носит название "Задача" (рис. 5). Его свойства определяют такие сведения, как идентификатор конфигурации, имя автора, специальные логотипы и графические заставки, некоторые базовые режимы работы конфигурации (например, выбор языка — русский или английский) и ряд других сведений.

Рис. 5

Кроме того, здесь находится глобальный программный модуль конфигурации, который может содержать общедоступные процедуры конфигурации, а также программу, которая автоматически выполняется при запуске данной конфигурации в среде "1С:Предприятие".

В начало статьи

Первая программа на встроенном языке

Чтобы сделать что-нибудь работающее, откроем в нашей пока совсем пустой конфигурации "Тестовый пример" окно глобального модуля и напишем там код, приведенный в листинге 1.

Теперь запустим нашу отредактированную конфигурацию в среде "1С: Предприятие" (F11 или командой на панели инструментов). В окне сообщений в нижней части экрана появится информация о текущем времени, а если это операция была проведена после 18 часов, появится окно с предупреждением и вопросом к пользователю (рис. 6).

Рис. 6

Все это сделала наша программа. Посмотрим, что же она из себя представляет, и немного познакомимся со встроенным языком (рис. 7). Первое что бросается в глаза — использование русских ключевых слов. Многим программистам это покажется совершенно ненужным проявлением русофильства, однако использование русского языка в программировании имеет некоторые явные преимущества и эта тема требует отдельного разговора. Не говоря уже о том, что разработчики "1С" предлагают пользователям два варианта программирования — на русском и на английском языке. И даже в смешанном варианте, как это показано в листинге 1 и на рисунке 7.

Рис. 7

В начало статьи

Немного о встроенном языке

В целом сам встроенный язык (в состав которого входит также среда разработки) представляется хорошо продуманным, развитым и удобным средством для решения задач программирования в среде "1С:Предприятия".

К сожалению, сегодня из поля зрения компьютерных дискуссий как-то совершенно выпала тема сравнительного изучения языков и сред программирования. (Как написал мне один российский автор: "Я пишу, как пользоваться инструментом, без всяких сетований на то, чего в нем не хватает или что сделано плохо".) Однако такие вопросы следует обсуждать не только в связи с выбором инструментария, но и потому, что задача создания собственных средств разработки является также достаточно актуальной.

Сейчас мы не будем останавливаться на этом вопросе, который может быть темой отдельного анализа, и сделаем только несколько замечаний. Язык программирования "1С:Предприятия" содержит довольно много интересных решений. В частности, следует отметить удобную реализацию справочной системы в виде "Синтакс-Помощника" (рис. 7, правое окно), возможность создания шаблонов для программного кода, автоформатирование текста кода, хороший отладчик, выдачу сводной информации о проведенной коррекции конфигурации при ее сохранении и многое другое.

Очень просто тут решена проблема разбивки текста на несколько строк. Например, оператор


Message ("Строка1
|Строка 2")

автоматически сделает перевод строки в месте, обозначенном знаком "|" (но только в первой позиции новой строки оператора). Это, конечно, гораздо удобнее, чем писать на VB:


Msgbox "Строка1" & vbCrLf & "Строка 2"

(Для "автоматизации" написания подобных строк в Office 2000 Developer появился даже специальный мастер.) Таких оригинальных и полезных решений в языке "1С:Предприятия" имеется довольно много. Но при этом хотелось бы сделать и некоторые критические замечания.

Например, по целому ряду причин было бы полезно взять за основу синтаксис Basic, а не Pascal (хотя это утверждение является, конечно же, спорным). По крайней мере обозначение конца оператора точкой с запятой является совершенно излишним — компилятор и без этого однозначно определяет конец оператора. К тому же обозначение конца оператора кодом перевода строки значительно упростит реализацию автоматического контроля синтаксиса непосредственно в процессе написания кода (чего, к сожалению, пока нет в этой системе).

Крайне необходимым представляется реализация режима обязательного объявления переменных. (Обратите внимание, что переменная "Время" на листинге 1 создается в момент операции присвоения.) Желательно также сделать более удобную форму сообщений о синтаксических ошибках.

В начало статьи

Структура программного модуля

Из содержимого написанного нами кода (листинг 1) хорошо видно, что программный модуль (не только глобальный) состоит из трех разделов: определения переменных, процедуры и функции, основная программа. Основная программа модуля срабатывает каждый раз при его запуске на выполнение. Учитывая то, что модули являются компонентами соответствующих объектов и соответственно запускаются при их загрузке или открытии, получается, что этот раздел модуля в целом равнозначен событийным процедурам типа Form_Load в VB.

Здесь же нужно отметить еще один любопытный момент по поводу процедур компиляции и исполнения кода. Программные модули хранятся в конфигурации в виде исходного текста, и компиляция каждого из них выполняется только в момент первого обращения. А затем модуль в виде машинного кода уже хранится в оперативной памяти. Таким образом получается, что компиляция программ происходит каждый раз при запуске приложения, но распределенная схема компиляции конфигурации небольшими фрагментами приводит к тому, что эти операции проходят практически незаметно для пользователя. Тем более, что при компиляции используется схема однопроходной трансляции (структура языка обеспечивает такую возможность), что повышает скорость преобразования кода. Впрочем, тут нужно отметить и потенциальный недостаток подобной схемы работы, так как раздельная компиляция модулей ("позднее связывание") затрудняет решение проблем проверки связей на уровне синтаксического контроля.

В начало статьи

Простейший объект: константа

Самыми простыми объектами "1С:Предприятия" являются константы — постоянные или условно-постоянные (редко изменяемые) данные, которые могут использоваться во всех других объектах. Щелкнув правой кнопкой мыши название "Константы", мы увидим на дереве метаданных контекстное меню, с помощью которого можно создать новую константу. В нашем примере мы создали три таких объекта, принципы описания которых хорошо видны на вкладках соответствующего диалогового окна (рис. 8-1,8-2,8-3). Любопытно, что константа может представлять собой ссылку на сложный объект данных, например, элемент справочников или документ.

Рис. 8-1

Рис. 8-2

Рис. 8-3

Весьма интересной чертой этих объектов является возможность задания периодических значений данных, которая позволяет хранить историю изменения константы (в нашем случае курса доллара). Мы можем легко получить эти значения на определенную дату и уже затем использовать их в расчетах. Так, для нашего примера можно написать следующую строчку кода в разделе основной программы и тогда при запуске приложения будет выдаваться значение курса доллара на дату запуска:


Сообщить("Текущий курс доллара:" + 
Константа.КурсДоллара.Получить(РабочаяДата()));

Формирование, просмотр и коррекция содержимого констант, как и всех других объектов, выполняется в среде "1C:Предприятие" (рис. 9).

Рис. 9

В начало статьи

Создаем адресную книгу

Попробуем сделать приложение (конфигурацию) "Адресная книга". Для этого лучше всего воспользоваться объектом "Справочник". Выберем команду контекстного меню "Новый справочник" и в появившемся диалоговом окне зададим его основные параметры и поля (рис. 10).

Рис. 10

Здесь следует отметить, что мы установили параметр "Длина кода" равным 0, то есть создаваемые нами элементы справочника не будут иметь внутренних уникальных кодов, с помощью которых выполняется их однозначная идентификация. (Другими словами, не воспользуемся одним из параметров, который наряду с другими механизмами системы обеспечивает ключевое достоинство "1С:Предприятие" — обеспечение ссылочной целостности информационной системы.) Механизм описания полей справочника в окне также является вполне очевидным.

Теперь нам нужно сформировать визуальные формы для ввода и просмотра данных. Выберем в диалоговом окне кнопку "Форма элемента" (ввод и просмотр отдельного элемента справочника). На экране появится прообраз этой формы с двумя обязательными кнопками ОК и "Закрыть", а поверх него — диалоговое окно "Размещение реквизитов". Обратите также внимание на появление внизу дополнительной панели инструментов для формирования диалоговой формы (рис. 11).

Рис. 11

Здесь у пользователя имеется очень широкий ассортимент возможностей по созданию диалогового интерфейса. Назову только некоторые из тех, отсутствие которых я всегда ощущал в VB. Например, при перетаскивании мышью реквизитов справочника на форме автоматически создаются соответствующие элементы управления, причем одновременно метка и поле ввода текста. Форма может состоять из нескольких слоев. Поэтому очень легко осуществляется настройка внешнего вида формы в зависимости от контекста задачи — нужно только выбрать нужный слой или их сочетание.

Мы сейчас не будем применять все эти изыски — просто нажмем кнопку "Вставить". Потом немного отредактируем созданную форму, разместив элементы управления в более продуманном порядке (рис. 12).

Рис. 12

Обратите внимание, что при желании мы можем создать программный модуль для данного диалогового окна, в котором, например, можно контролировать значимость вводимых параметров, выполнять автоматический расчет вторичных данных (так, при решении финансовых задач вычислять стоимость в долларах по введенной рублевой сумме и текущему курсу валюты) и пр.

Аналогично сформируем "Форму группы", учитывая, что наша адресная книга может быть разбита на разделы по подразделениям предприятия (рис. 13).

Рис. 13

Далее таким же образом создадим Форму списка для просмотра нашей адресной книги в табличном виде (рис. 14).

Рис. 14

Все, разработка адресной книги закончена. Теперь запускаем нашу конфигурацию в среде "1С:Предприятия" и начинаем работать с созданной нами адресной книгой: заполняем сведения о наших знакомых, формируем группы (папки) адресатов и т.д. (рис. 15).

Рис. 15

Проводить сравнение разных инструментов — дело весьма щекотливое. Однако хотелось бы вспомнить, что описание создания адресной книги на VB6 вылилось у нас в целую статью ("КомпьютерПресс" N 7'98, с.187), а воспроизведение разработки самого приложения заняло бы сейчас не менее часа (там надо было писать еще и программный код). С использованием же системы "1С:Предприятие" мы решили эту задачу, причем в расширенном варианте (в VB мы не создавали иерархическую структуру справочника), примерно за одну минуту, не написав ни строчки кода.

Стоит также обратить внимание, что в ходе работы мы вообще не сталкивались с вопросами формирования базы данных (хотя работа всех объектов, в том числе и простых констант, связана с хранением информации пользователя). Эту задачу полностью берет на себя система.

Но все же для примера использования встроенного языка потратим еще полминуты и напишем несколько строк в модуле формы элемента справочника (рис. 16).

Рис. 16

Процедура ПриЗаписи выполняет простую проверку правильности заполнения исходных данных. Смысл выполняемых операций не требует специальных комментариев, так как он понятен из названий операторов (к вопросу о достоинстве использования русскоязычных имен): если поле "Наименование" не заполнено, то на экран выдается предупреждение об ошибке, операция записи данного элемента в справочник отменяется и курсор ввода автоматически устанавливается в поле "Наименование".

В начало статьи

Это только вступление к настоящему изучению системы

В этой статье представлена только малая толика инструментальной среды "1С:Предприятия". Вот более серьезный пример: слушатели учебного курса "1С:Предприятие. Базовые объекты" за три-четыре дня в ходе изучения технологии разработки успевают создать функционально законченное приложение "Учет основных средств" (рис. 17), которое включает ведение нескольких справочников, входных и выходных документов, журналов учета документов; формирование отчетных форм; модификацию пользовательского интерфейса и пр. (рис. 18). Однако здесь нужно еще раз напомнить, что это приложение реализовано с использованием только базовых объектов, без применения специализированных компонентов системы.

Рис. 17

Рис. 18

Я далек от мысли представить "1С:Предприятие" в качестве некой идеальной платформы создания бизнес-приложений. Ряд архитектурных идей и конкретная реализация отдельных элементов технологии кажутся мне не вполне оптимальными. Хотя, разумеется, такие оценки очень субъективны и являются предметом обсуждения. (Список моих "претензий" к VB гораздо шире. Но не потому, что он плох — просто я его лучше знаю.)

Но что бесспорно — в данном случае мы имеем дело с глубоко продуманной и четко реализованной технологией. Видно, что каждый ее элемент реализован в рамках единой концепции, и в этом плане очень показательно высокое качество документации для разработчиков.

Проводить параллели между "1С:Предприятием" и универсальными средствами быстрой разработки, типа VB или Delphi, можно лишь с большой долей условности. Инструментарий "1С" является более специализированным (если так можно выразиться, более "крупноблочным") средством, нацеленным именно на экономические задачи.

В заключение хотелось бы отметить такой принципиальный вопрос. В начале 90- х годов российские пользователи из числа "серьезных клиентов" явно отдавали предпочтение зарубежным программным разработкам. Объяснялось это не преклонением перед Западом, а довольно меркантильными соображениями — надежностью поставщиков. (Основной аргумент против российских разработок звучал так: "А вы гарантируете, что ваша фирма будет существовать через пару лет?".)

К концу 90-х годов российские разработчики прикладного ПО доказали свою устойчивость и надежность и в целом вернули доверие рынка. Однако требования клиента при выборе платформы гораздо серьезнее, чем при покупке отдельного приложения. Широкое применение платформы "1С:Предприятие" (разработкой в этой среде в той или иной мере занимаются 1300 фирм-франчайзи) говорит о том, что создание отечественных оригинальных технологий разработки современных программных комплексов — дело вполне реальное.

В начало статьи

ПРИЛОЖЕНИЯ:

В начало статьи

Таблица 1. Состав библиотек и объектов системы "1С:Предприятие"

Наименование Краткая характеристика
Базовые обьекты
Константы Постоянные ( условно-постоянные) величины
Справочники Списки однородных элементов данных
Документы Служат для ввода информации о совершенных хозяйственных операциях
Журналы документов Списки объектов данных типа "Документ"
Перечисления Списки значений, задаваемых на этапе конфигурирования
Отчеты Средство получения выходной информации
Обработка Объекты метаданных этого вида используются для выполнения различных действий над информационной базой
Объекты библиотеки "Бухгалтерский учет"
Планы Счетов Списки объектов данных типа "Бухгалтерский счет" - учетных регистров, по которым будет выполняться группировка средств при работе с системой "1С:Предприятие"
Виды Субконто Списки объектов аналитического учета
Операция Средство отражения в бухгалтерском учете хозяйственных операций, происходящих на предприятии
Проводка Бухгалтерские проводки
Объекты библиотеки "Оперативный учет"
Регистры Средство накопления оперативной информации о наличии и движении средств
Объекты-компоненты "Расчет"
Журналы расчетов Средство проведения периодических расчетов и хранения результатов расчета прошлых периодов
Виды расчетов Алгоритмы, по которому могут проводиться расчеты записей журналов расчета
Группы расчетов Средство логического объединения видов расчета по тем или иным признакам
Календари Средство построения графиков работы предприятия, внешних организаций или отдельных категорий работников

В начало статьи

Листинг 1. Первое приложение в среде "1С:Предприятие". Программный код глобального модуля.


// Глобальный модуль
// =================
//Раздел Переменных 
//————————-
Перем кнДаНет Экспорт;
Var отвДа Export;
Перем отвНет Export;

//Раздел процедур и функций
//————————————-
Процедура ПриНачалеРаботыСистемы() 
// Проверка рабочего времени
// Если СтатусВозврата=0, то приложение автоматически закроется
  Перем Чс,Мн,Ск;
  ТекущееВремя(Чс,Мн,Ск);
  Время=Чс+Мн/60+Ск/3600;
  Если (Время>14) и (Время<15) тогда
    Ответ=Вопрос("Сейчас не рабочее время!
      |Будете работать?",кнДаНет);
    СтатусВозврата(?(Ответ=отвНет,0,1));
  EndIf;
КонецПроцедуры

//Раздел основной программы
//————————————-
Сообщить("Текущее время:"+CurrentTime());
//Инициализация переменных модуля
кнДаНет=4;  //"Да+Нет"
отвДа=6;  //"Да"
отвНет=7;    //"Нет"

В начало статьи