oldi

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

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

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

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

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

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

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

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

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

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

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

 

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

Однако в нашем обзоре «Интеграция VBA в бизнес-приложения независимых разработчиков» (КомпьютерПресс 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С:Предприятие», мы увидим окно «Запуск», в котором требуется выбрать необходимую для дальнейшей работы «Информационную базу» (рис. 2). Здесь нужно сделать важные замечания.

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

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

«Информационная база», которую предлагается выбрать пользователю при запуске, является совокупностью «Конфигурации» и данных клиента. Поскольку у нас пока нет никаких данных, фактически нам здесь предлагается выбрать конфигурацию, на основе которой мы будем строить собственную базу данных.

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

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

В начало В начало

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

Запустим программу «Конфигуратор» с нашей пока пустой конфигурацией «Моя Тестовая База» и откроем в ней окно «Конфигурация» (рис. 3). Там мы увидим три вкладки, которые отражают взаимосвязанные составные части конфигурации:

  • структура метаданных;
  • набор пользовательских интерфейсов;
  • набор прав пользователя.

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

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

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

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

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

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

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

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

В начало В начало

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

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

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

Первое, что бросается в глаза, — использование русских ключевых слов. Многим программистам это покажется совершенно ненужным проявлением «русофильства», однако использование русского языка в программировании имеет некоторые явные преимущества, и эта тема требует отдельного разговора. Не говоря уже о том, что разработчики «1С» предлагают пользователям два варианта программирования — на русском и на английском языке. И даже их смешанный вариант, как это показано в листинге 1 и на рис. 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). Любопытно, что константа может представлять собой ссылку на сложный объект данных, например на элемент справочников или документ.

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

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

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

В начало В начало

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

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

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

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

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

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

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

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

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

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

В начало В начало

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

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

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

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

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

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

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

КомпьютерПресс 5'2000