Три модели представления данных 1С


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

Что такое модели представления данных и некоторые компоненты объектов мы рассмотрели в вводном уроке по данным 1С.

Сейчас давайте обсудим конкретику по этому вопросу.

 

Объектная модель данных 1С

Например, мы ввели элемент справочника «Лопата». Данный элемент для нас является цельным объектом. Это значит, что у него есть:

  • Данные этого элемента (заполненный пользователем список полей)
  • Стандартный «методы» объекта
  • Не стандартные «методы» объекта (написанные программистом)
  • Ссылка (Уникальный «номер» конкретного элемента справочника).

Все перечисленные свойства объекта составляют вместе Объект 1С. С таким объектом можно работать из программы 1С.

 

Например:

СправочникОбъект.Наименование = «Лопата»;
СправочникОбъект.Записать();

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

 

Табличная модель данных 1С

Все данные 1С хранятся в базе данных. База данных – это набор таблиц. Соответственно «физически» объект 1С раскладывается на набор строк в этих таблицах.

Например, справочник Товары – это таблица. Если у справочника Товары есть «табличная часть», то справочник будет представлен двумя связанными таблицами.

Элемент справочника Товары «Лопата» — это одна строка в этой таблице. Если у него есть «табличная часть», то в первой таблице будет будет одна строка, а во второй таблице – столько строк, сколько пользователь ввел в «табличную часть».

В таблице должен быть уникальный «ключ», который определяет идентификатор строки в таблице. Этот идентификатор – тот самый уникальный идентификатор Объекта 1С (Ссылка).

В базе данных он хранится как всем известный GUID. Пример GUIDа – «6F9619FF-8B86-D011-B42D-00CF4FC964FF».

GUID элементу справочника «Лопата» назначит сама 1С в момент записи в базу данных. Он всегда будет уникальным.

А что же на счет полей «Код» и «Наименование», которые для пользователя определяют уникальность элемента? А ничего! В табличной модели это просто два поля, не отличимые от остальных обычных полей этого элемента. В табличном представлении главное – это GUID.

 

XML-модель данных 1С

Всем программам нужно сохранять данные в файлы, чтобы они запоминались. Когда-то каждая программа имела свой формат данных (то как они выглядят в файле). Но как тогда делать, чтобы разные программы понимали файлы других программ, когда вокруг такой бардак с форматами?
И однажды светлая голова придумала формат XML.

Это обычный текстовый файл, в котором по определенным правилам, можно записать любые данные. Открыть этот файл для просмотра можно – в блокноте, в браузере и так далее.

Для 1С также важен обмен данными. Хотя бы между разными базами данных 1С. Из Бухгалтерии 1С в Торговлю 1С и наоборот. Обмен производится путем сохранения данных из таблиц базы данных — в файлы XML.

Но чтобы каждый программист 1С не утруждал себя написанием алгоритма, по которому тот или иной справочник 1С будет выглядеть в XML – алгоритм кодирования данных 1С в XML встроен в платформу 1С.

Поэтому любые (с оговорками) данные 1С могут быть сохранены в стандартный XML по стандартным правилам платформы 1С по выгрузке в XML.

Пример файла XML, выгруженного 1С:

 

Как это все работает?

Все это классно — таблицы, объекты и т.п. Как же это работает?

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

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

Теперь подумайте, к чему приводит бездумный цикл подобного рода:
Пока Выборка.Следующий() Цикл
СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();
КонецЦикла;

 

Он в цикле (множество раз) генерит загрузку всего, что только возможно:

  • Платформа-клиент (вызов по сети): Эй, парень, мне нужен объект элемент справочника
  • Платформа-сервер (вызов по сети): Да не вопрос! Эй, SQL, выполни ка запрос по (например) трем таблицам и найди среди сотен (тысяч) строчек несколько нужных мне
  • SQL (память, винт, сеть): Шуршит индексами.. О! Нашел! Нате — высылает кусок данных
  • Платформа-сервер (данные по сети): Ща передам
  • Платформа-клиент (данные по сети): Во, спасибо.

 
Запросы в программах 1С могут быть прописаны с помощью языка запросов, например:
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ Код = &Код");

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

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

Поэтому в момент организации архитектуры базы данных, а также при программировании, не забывайте про модели представления данных в 1С.


Проголосовать за этот пост:

1 Star2 Stars3 Stars4 Stars5 Stars (34 голосов, среднее: 4,44 из 5)
Загрузка...

Добавить комментарий