Книга знаний

Рекламное место пустует
Инф. технологии / Общие вопросы / Архитектура

1С и все, все, все: Программирование

В данной статье будет попытка сравнения 1С и других систем учета. В этой части рассматриваются вопросы программирования.Автор статьи: Гений 1С | Редакторы: Волшебник, Чума, alyuev
Последняя редакция №17 от 09.08.07 | История
URL: http://kb.mista.ru/article.php?id=211

Ключевые слова: 1С,axapta,navision,access


Обзорное сравнение движков



* 1С77/1C80/Axapta

Непосредственное сравнение движков(платформ) Axapta и 1C80 (без учета сравнения производительности) показывает:

1. Аксапта/Navision очень традиционный для программистов инструмент. В ней работают почти все парадигмы программирования и работы с СУБД.

2. По идеологии Аксапта (да и Навижин) похожа на Акссес.

3. 1С с точки зрения традиционных программистов на редкость нетрадиционный инструмент. С их точки зрения большинство парадигм программирования и построения СУБД в 1С практически не работают. Начиная с того, что база данных, на которой построена 1С, не является реляционной. Но с точки зрения программистов 1С это является ее преимуществом, т.к. делает процесс программирования быстрым, наглядным, удобным и превращает 1С в самую популярную в России Rapid Application Development среду (RAD).

В 1С77 по сравнению с 1С80 менее развитый интерфейс и возможности упрвления формами.

В некотором роде программировать удобнее на 1С за счет работы программиста на уровне прикладных объектов, а не таблиц базы данных. Также только в 1С введено понятие метаданных, что существенно упрощает взгляд на базу данных.

Не многие программисты могли сравнивать Axapta и 1С между собой, но многие имели возможность сравнить программирование в Access и 1С, и однозначно могут утверждать что разработка в 1С быстрее, удобнее и менее ошибочна, чем в Access.

В Axapta присутствует ООП (язык X++), что имеет свои преимущества по созданию надстроек над базовым функционалом.

SQL-подобные запросы



* 1C 80

Sql-подбные запросы - только на чтение данных (SELECT), UPDATE нет.

см. также: Книга знаний: v8: Язык запросов 8.0

* 1C 77

Используется свой формат запросов, не похожий на SQL
Книга знаний: Запросы

* Axapta

Sql-подбные запросы - только на чтение данных (SELECT), UPDATE нет.

* Navision

Говорят, что в Навижн нет Sql-подбных запросов, все делается через выборки с разными фильтрами.

Структура базы данных



База данных во всех системах представляет собой набор взаимосвязанных таблиц.

Таблицы базы данных



* Axapta

Программист в Axapta работает в основном непосредственно с таблицами. Т.е. когда он работает с документом Sales, он работает с шапкой документа - таблицей Sales_Table и строками документа - таблицей Sales_Lines.

* 1C 77/80

Программист в 1С работает на более высоком уровне абстракции, чем в Axapta - с прикладными объектами. Один прикладной объект может размещаться во множестве таблиц, но для программиста он представляет единую сущность. Это упрощает и делает более наглядным работу программиста.

Префикс таблицы обычно соответствует типу прикладного объекта, а числовой суффикс - номер этого прикладного объекта среди прочих, т.е. по структуре базы данных не очень наглядна, но программист 1С работает не на этом уровне, а выше - с прикладными объектами. (Здесь можно дать ссылку на DD/DDS файлы, описывающие соответсвтие между именем объекта в метаданных и именем таблицы в базе).

Метаданные



* 1C 77/80

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

1. Список прикладных объектов и связанный с ними код - собственно говоря конфигурация 1С.

2. Описание отображения прикладных объектов на базу данных - в каких конкретно таблицах хранятся прикладные объекты.

* Axapta

Нет данных, описывающих назначение таблиц базы данных.
Есть словарь, который каждой таблице и реквизиту этой таблицы ставит в соответствие уникальный числовой код.

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

Идентификация записей



Система 1С на уровне платформы использует суррогатный ключ , системы Axapta/Navision используют на уровне платформы естественный ключ, в Access программист сам выбирает вид ключа.

В 1С 77 используется ключ объекта вида Тип+Вид+Номер в таблице, т.е. например Справочник+Номенклатура+11, естественно (Справочник+Номенклатура кодируется неким числом для экономии места).

В 1С 80 используется ключ объекта вида Тип+Вид+GUID, т.е. например Справочник+Номенклатура+{fff-ff-ssdf-dfsdf-ee}, где GUID - глобальный идентификатор.

В Axapta/Navision используется некий осмысленный ключ, например код контрагента или товара. При этом ключ записи можно менять, т.к. ключ несет осмысленную информацию, а она может меняться у объекта.

О преимуществах и недостатках различных ключей можно почитать здесь:
http://www.akzhan.midi.ru/devcorner/articles/NaturalKeysVersusAtrificialKeysByTentser.html

Представление объектов



В данном разделе речь идет о способах представления объектов в списках.

1С позволяет представлять объект в виде кода или наименования.

В Axapta/Navision объект представлен только в виде осмысленного естественного ключа.

К сожалению, нигде не реализован на системном уровне способ отображения объекта в зависимости от языка текущего пользователя в базе данных, с которыми работают пользователи.

Составные колонки



* 1C 77/80

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

* Axapta/Navision

Для хранения ссылок на несколько таблиц нужно использовать составное поле Тип+Ключ.

Триггеры таблиц


Наличие триггеров - процедур проверки записи/удаления/изменения строк таблиц.

* 1C 77/80
нет

Модификация данных

Завершение транзакции



* 1C 77/80

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

* Axapta

Гарантируется завершение разнесения операции при программном разнесении или ручном.

Объекты модификации данных




* 1C/Axapta
Доступ к данным для модификации в 1С ведется на уровне прикладного объекта. В Axapta имеются объекты для доступа к каждой таблице базы данных.

Рассмотрим документ заказ, который имеет в шапке реквизиты Дата, Контрагент, Номер, и табличную часть Товары, в которой есть реквизиты Товар, Количество, Цена, Сумма. Допустим нам нужно во всех документах по Контрагенту "Иванов" изменить цену на 10%.

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

В Axapta аналогичная операция хранится в таблицах Sales_Table (шапки) и Sales_Lines (строки).
Получив объект таблицы Sales_Table, мы открываем курсор (указатель на записи) к этой таблице, в который попадают все операции по Иванову. Далее для каждой записи мы получаем объект таблицы строк Sales_Lines, открываем курсор к этой таблице на все записи, меняем там цены и по очереди выполняем метод update объекта таблица для каждой строки таблицы.

В 1С нет возможности изменять отдельно одну строку табличной части - можно менять только объект целиком.

Вывод: 1С более прозрачно для пользователя выполняет работу - пользователь работает не на уровне таблиц, а на уровне прикладных объектов. Некоторые программисты 1С могут и не знать, что документ на физическом уровне состоит из нескольких таблиц и тем не менее прекрасно работать с документами.

С другой стороны, доступ к данным в Axapta гибче за счет того, что можно менять только строки.

Расширяемость



* 1C 77

Для 1С 77 создано много полезных внешних компонент, которые создаются как OLE-объекты.
Возможно использование любых зарегистрированных в системе OLE-объектов.

* 1C 80

Возможно использование любых зарегистрированных в системе OLE-объектов. Насчет внешних компонент для 1С 80 Гений 1С пока ничего не слышал, а Волшебник слышал, что все внешние компоненты для 7.7 годятся и для 8.0, кроме тех редких компонент, которые открывают окна внутри главного окна 1С:Предприятия.

Объектно-ориентированное программирование



* 1C 77
Имеются только встроенные объекты, соответствующие прикладным объектам, набор их методов и свойств изменить нельзя. Наследования нет

* 1C 80
Имеются только встроенные объекты, соответствующие прикладным объектам, набор их методов и свойств можно расширять. Есть только одноуровневое наследование от встроенных системных классов, типа "Справочник", "Документ" и т.д.


Пространство функций



* 1C 77
Все общие функции сосредоточены в одном глобальном модуле. Также у каждого объекта есть свои функции, которые может использовать только этот объект или другой объект, через ОткрытьФорму

* 1C 80
Общие функции могут быть разнесены по различным модулям. Также у каждого объекта есть свои функции. Открытые функции (Экспорт) могут вызываться как методы объекта, остальные функции (Private) может использовать только сам объект.

Управление элементами формы



* Axapta

На уровне платформы реализован morphX http://axapta.mazzy.ru/screenshots/common/example.html
morphX позволяет включать и выключать реквизиты, кнопки, закладки, отчеты, таблицы и поля в таблицах. Для каждого такого элемента можно назначить права доступа. Аксапта автоматически прячет выключенные элементы, при этом автоматически изменяются размеры формы таким образом, чтобы оптимально показывать только доступные на всех закладках реквизиты.

* 1С 80
Можно управлять видимостью и доступностью элементов формы, устанавливать привязки для элементов формы, которые указывают, как должны быть привязаны элементы формы к форме и куда они должны смещаться при отключении видимости других элементов формы. Программно можно создавать элементы формы, менять их размеры, привязки и т.п. Теоретически можно написать подобный morphX функционал.

* 1С 70
Можно управлять только видимостью и доступностью элементов формы. С помощью широко распространенной нетиповой внешней компоненты FormEx можно практически полностью управлять элементами формы, вплоть до их создания и удаления. Реализовать подобный morphX функционал возможно с помощью внешних компонент.
Закладка

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2011 | Mista.ru

Яндекс.Метрика