1С и все, все, все: Программирование Ключевые слова: 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 функционал возможно с помощью внешних компонент.
|