Реалізація баз даних формату DBF має на увазі, що кожна таблиця зберігається в окремому файлі. Тому в подальшому ми будемо застосовувати тер-мін «файл бази даних» або «файл БД», маючи на увазі таблицю бази даних.
Для організації упорядкування вмісту файлу БД і пошуку в ній за значенням одного або декількох полів застосовується механізм індексів. Його застосування можна порівняти з сортуванням картотеки за певним при-знаку (сукупності ознак). Однак, на відміну від картотеки, файл БД може мати відразу кілька індексів, і, відповідно, бути уперед-ченним одночасно за кількома ознаками. Кожен індекс має Наиме-вання. прізнакунікальності. вираженіеіндекса і фільтр. Найменування індексу використовується для ідентифікації індексу. Вираз індексу і фільтр є написані на спеціальній мові вирази, обчислення значення яких для кожного запису дозволяє визначити її ме-сто при упорядкуванні та необхідність приміщення її в упорядкований спи-сок (індекс може містити згадку не про всі записах таблиці, а толь-ко про що задовольняють висловом фільтра). Детальніше вираження індексу і фільтра, стосовно об'єктів XBase, розглянуті в кінці даного розділу. Унікальний індекс (має встановленим ознака унікально-сти) дозволяє мати в індексі посилання на записи тільки з різним значени третьому індексного виразу.
Індекси зберігаються в індексному файлі. Індексний файл може містити інформацію більш ніж про одне індексі.
Призначення агрегатного типу даних XBase
Для роботи з базами даних формату DBF в системі може використовувати-ся спеціальний агрегатний тип даних - XBase. Механізм роботи з базами даних формату DBF призначений для забезпечення можливості маніпулято-вання ними безпосередньо з вбудованої мови програми 1С: Підприємство. Кожен XBase-об'єкт може бути пов'язаний з одним файлом бази даних.
Об'єкти XBase мають змінюваний набір атрибутів, склад і тип яких залежить від структури файлу бази даних, з яким пов'язаний кон-конкретного об'єкт. Об'єкт містить в своїх атрибутах інформацію про одну поточного запису. Кожному полю файлу бази даних відповідає один атрибут об'єкта. Найменування атрибута збігається з ім'ям поля.
Кожен об'єкт являє собою структуру даних, розташованих в пам'яті комп'ютера і зміна вмісту його атрибутів викликає не-повільного зміни в файлах бази даних. Після увімкнення режиму автозбереження запис вмісту об'єкта в файли БД відбувається при зраді-ванні позиціонування (перехід з наступного запису, пошук по ключу і т. Д.), При вимкненому режимі автосохранения запис змін відбувається толь-ко при виклику відповідного методу об'єкта.
Слід мати на увазі, що одночасно XBase-об'єкт може бути пов'язаний не більше, ніж з одним індексним файлом. Всі зміни в базі даних, зро-ланние в сеансі роботи з одним індексним файлом, ніяк не відбиваються на інших. Тому не рекомендується мати більше одного індексного файлу для БД. В іншому випадку, після кожного відкриття БД з індексним файлом, відмінним від відкритого в попередньому сеансі роботи з базою, слід вироб-дить переіндексацію (оновлення вмісту індексного файлу).
Метод стиснення бази викликає фізичне знищення записів, позначений-них як віддалені. Метод очищення бази викликає фізичне знищення всіх записів. Після застосування цих методів відновлення видалених запи-сей стає неможливим.
Крім роботи з існуючими базами даних, агрегатний тип XBase має набір методів, що дозволяють створити нову базу даних довільної структури, нові індекси і новий індексний файл. Слід зазначити, що, якщо використання методів, які змінюють структуру БД, можливо тільки для об'єктів, не пов'язаних з базою даних (т. Е. Для новостворюваних БД), то створення нових індексів і індексного файлу можливо як для створюваних БД, так і для вже існуючих і відкритих.
Основне призначення об'єктів XBase - організація експорту-імпорту ін-формації в / із зовнішніх файлів формату DBF. Використання методів Xbase для доступу безпосередньо до даних інформаційної бази системи 1С: Підприємство не рекомендується.
Об'єкти XBase не підтримують поля типу memo (див. ДобавітьПоле).
Підтримувані об'єктом XBase фукции, які можна використовувати у виразах і фільтрах індексів перераховані в розділі «Вираз і фільтр індексу».
Об'єкти XBase підтримують тільки монопольний доступ до файлів. XBase-об'єкти підтримують індексні файли в форматі CDX. Однак, використання зовнішніми програмами (наприклад, FoxBase) індексних файлів, створених за допомогою об'єктів XBase, так само, як і використання об'єктивним тами індексних файлів, створених зовнішніми програмами, не рекомендується через можливу несумісність версій.
Контекст роботи з XBase
У всіх програмних модулях для роботи з базами даних формату DBF слід використовувати об'єкти типу XBase. Можна створити довільне число об'єктів типу XBase за допомогою функції СоздатьОб'ект. Щоб звернути-ся до атрибуту об'єкта або викликати його метод, ім'я атрибута або методу (з вка-пізнанням необхідних параметрів) пишеться через точку після імені об'єкта.
Російськомовне написання ключового слова XBase відсутня.
ФС.ВибратьФайл (0, имяфайла, ІмяПуті. "*. *".);
ПутьДБ = ІмяПуті + имяфайла;
Якщо ДБФ.Открита () = 1 Тоді
Попередження ( "База відкрита", 2);
ПІБ = ДБФ. FIO; // Мається на увазі, що поле FIO мається на відкритій БД
Попередження ( "Першим в" + ПутьДБ + "згаданий т." + ПІБ, 5);
Попередження ( "НЕ змогли відкрити Базу!", 2);
Атрибути об'єкта XBase
Надає доступ до поля запису з ім'ям «Поле». Ім'я поля має збігатися з ім'ям поля бази даних, з якою пов'язаний об'єк-ект.
Атрибут <Поле> надає доступ до поля запису з ім'ям «Поле». У тексті програмного модуля під терміном <Поле> розуміється ім'я конкурують-ного стовпчика файлу бази даних, з яким пов'язаний об'єкт.
Атрибут має сенс тільки якщо файл бази даних знаходиться у відкритому стані.
Склад атрибутів об'єкта може динамічно змінюватися в процесі вико-нання 1С: Підприємства і визначається набором полів файлу бази даних, з яким об'єкт пов'язаний в даних момент часу.
Надає доступ до агрегатному типу даних типу «Ключ».
Агрегатний тип даних типу «Ключ» має тільки атрибути. Склад атрі-бутов повністю повторює атрибути XBase-об'єкта за винятком того, що відсутня атрибут «Ключ». Значення атрибутів використовуються XBase-об'єктом для обчислення виразу індексу при використанні методу НайтіПоКлючу.
Методи об'єкта XBase
Числове вираження. Режим пошуку записів:
0 - шукає запис на точну відповідність ключу (=);
1 - шукає запис на точну відповідність з ключем або велику (> =);
2 - шукає запис з великим ключем (>);
-1 (мінус одиниця) - шукає запис на точне відпо-ствие з ключем або меншу (<=);
-2 (мінус два) - шукає запис з меншим ключем (<).
Число: 1 - якщо дія виконана (запис знайдений); 0 - якщо дія не виконана.
Метод Знайти дозволяє знайти запис, яка відповідає певному значенню <Ключ> ключа за поточним індексом і режиму пошуку, переданому в якості параметра. Покажчик встановлюється на знайдену запис.
Слід зазначити, що обчислення значення індексу при роботі XBase-об'єкта з базою даних здійснюється об'єктом самостійно на підставі виразу, переданого йому при створенні ключа (див. Опис методу ДобавітьІндекс). При виклику даного методу значення <Ключ> має бути обчислено засобами вбудованої мови, що може представляти визначено-ні труднощі, якщо індекс складовою, поля, включені в вираз індексу, відмінні від строкових, і т. д. Тому застосовність даного методу ограниче-на випадком використання простих строкових виразів індексу. У більш складних випадках слід застосовувати універсальний метод НайтіПоКлючу.
ЗапісьНайдена = ДБФ.Найті ( "Іванов", 0);
Знайти запис за індексом.
Числове вираження. Режим пошуку записів:
0 - шукає запис на точну відповідність ключу (=);
1 - шукає запис на точну відповідність з ключем або велику (> =);
2 - шукає запис з великим ключем (>);
-1 (мінус одиниця) - шукає запис на точне відпо-ствие з ключем або меншу (<=);
-2 (мінус два) - шукає запис з меншим ключем (<).
Число: 1 - якщо дія виконана (запис знайдений); 0 - якщо дія не виконана.
Метод НайтіПоКлючу дозволяє знайти запис, що відповідає значени-ям атрибутів агрегатного об'єкта типу «Ключ» XBase-об'єкта за поточним індексом і режиму пошуку, переданому в якості параметра. Покажчик уста-новлюється на знайдену запис. Перед викликом методу слід встановити значення всіх атрибутів агрегатного об'єкта типу «Ключ», які беруть участь в обчисленні виразу поточного індексу (див. Опис методу ДобавітьІндекс).
ДБФ.Ключ.DIV_ID = 15; // відділ нових розробок
ЗапісьНайдена = ДБФ.НайтіПоКлючу (0); // пошук по складеному, неоднорідного ключу
Отримати значення поля запису.
При роботі з індексами під час виконання 1С: Підприємства XBase-об'єкти виробляють обчислення виразу індексу і фільтра. Вираз індексу і фільтра - це рядкові вирази, складені на спеціальному мові об'єктів XBase.
Вираз індексу використовується для обчислення значення ключа для каж-дой записи бази даних. Результатом обчислення вираження повинно бути значення одного з наступних типів: числове, строкове, дата або булево. Вираз фільтра має повертати результат типу булево. Якщо значення виразу фільтра для конкретної записи бази даних одно істині, інфор-мація про цей запис буде включена в індексний файл, в іншому випадку індексний файл не буде містити інформацію про цей запис і позиційні-вання на цю запис XBase-об'єкта з даними поточним індексом вироб-диться не буде.
Атрибути (крім "Ключ"), константи і функції можуть бути використані як частини виразів. Частини вирази можуть об'єднуватися за допомогою інших функцій або операторів. Найпростішим вираженням може бути ім'я атрибута: "FULL_NAME". В такому випадку тип виразу буде відповідати типу ат-рібута.
Константи можуть мати числовий, строковий і булевий тип. Строкові константи полягають в одиничні лапки ( 'Строкова константа'). При необхідності включити до складу строкової константи символу подвійної ка-вичкі, його слід випереджати зворотною косою межею, наприклад, 'Фірма "Вега"'. Булеві константи записуються як. TRUE. або. Т. для позначення-ня істини і. FALSE. або. F. в іншому випадку.
Оператори використовуються для об'єднання частин висловлювання. Частини Вира-вання повинні мати тип, відповідний оператору, наприклад, оператор "/" (поділ) працює з двома числовими значеннями.
Порядок виконання операторів в вираженні відповідає загальноприйнято-му - з урахуванням дужок і пріоритетів операторів. Наприклад вираз "1 + 2 * 3" поверне 7, а "(1 + 2) * 3" поверне 9.
Оператор "Об'єднання 2" трохи відрізняється тим, що прогалини в кінці першого рядка будуть переміщені в кінець результату. Наприклад, результатом обчислення виразу " 'Іванов' + 'І. І.' "Буде" Іванов І.І. ', а "' Іванов '-' І. І. ' "- 'ІвановІ.І.'.
Менше або дорівнює
Більше або дорівнює
" 'CD' $ 'ABCD'" поверне ". Т."
"8 <7 " вернет ". F ."
Тип дати. Системна дата.
Число. Номер дня в місяці.
Рядок. Значення цієї дати у форматі ММ / ДД / РР
Рядок. Значення цієї дати у форматі РРРРММДД
IIF (Log, IfTrue, IfFalse)
Log - висловлю-ня булева ти-па.
IfTrue. IfFalse - тип визначається під час исполне-ня. Повинні мати однаковий-ву довжину і тип.
Тип збігається з типом IfTrue і IfFalse.
Повертає IfTrue, якщо зна-ня обчисленого виразу Log одно істині, і IfFalse в про-тивно випадку.