Главная » 1С Предприятие » ПЕРЕДАЧА ДАННЫХ ИЗ  1С В DBF-ФАЙЛЫ – ЧАСТЬ 3

1

если док.Выбран()  =  1 тогда

дбф.DocName = док.Вид(); дбф.DocId  = док.НомерДок;

иначе

дбф.DocName = ""; дбф.DocId = 0;

конецЕсли;

дбф.3аписать( );                     //                     Сохраняем данные конецЦикла; // пока

конецПроцедуры // ПеренестиОклад

Рис. 9.4. Таблица тЗнач, преобразованная в процедуре ДляДБФ

Рис. 9.5. Таблица тЗнач, преобразованная в процедуре ДляДБФ2

Рис. 9.6. Фрагмент файла employee.dbf

Замечания:

Рис. 9.7. Фрагмент файла salary.dbf

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

2.              С  файлом, на  который ссылается объект  XBase, может  одновременно  работать  только  один пользователь.  Поэтому если есть не равная нулю  вероятность  одновременного  доступа  к одному  и тому же DBF-файлу  более  одного  пользователя, то с объектом XBase нужно  соответствующим образом использовать конструкцию  Попытка.

9.3.2.  АТРИБУТЫ И  МЕТОДЫ ОБЪЕКТА  XBASE

9.3.2.1.       АТРИБУТЫ ОБЪЕКТА XBASE

Объект  XBase имеет два вида атрибутов: поля  DBF-файла и  его ключи.

Атрибут Поле  позволяет  по  имени  поля  читать и  изменять  значение  поля текущей  записи  DBF-файла. Число таких атрибутов равно числу полей  файла, на который ссылается  объект   XBase.

Пример.  В  окне  сообщений  выводится значение  поля  Name   3-й  записи  файла ет ployee.dbf.   В  соответствии  с  рис.  9.6  в   этом   поле   хранится  строка  Агальцов   Юрий Алексеевич. Затем  меняется значение  6-й  записи  файла  employee.dbf.

процедура Выполнить()                     //              Связана с кнопкой Пуск обработки Проба  перем дбф, ин;

ОчиститьОкноСообщений();

дбф =  СоздатьОбъект("ХВазе"); дбф.ОткрытьФайл("emplоуее.dbf"); если дбф.Открыта( ) = 0 тогда

Предупреждение("Файла employee.dbf в  каталоге  пользователя  нет.");  возврат;

конецЕсли;

// Перемещаемся на третью запись файла employee.dbf

// После того как файл открыт, он позиционируется на своей первой записи дбф.Перейти(3);

,           Сообщить(дбф.Name);      //            Напечатает Агальцов Юрий Алексеевич

// Перемещаемся на шестую запись файла employee.dbf дбф.Перейти(6);

дбф-Name = "Бараненков Иван Несторович";

дбф.3аписать(  );                          //                Не забываем записать изменения в файл Предупреждение("Готово.");

конецПроцедуры // Выполнить

Замечание.    Файл    employee.dbf  изменялся    при   закрытом   индексном   файле  ет ployee.cdx, поэтому индексы этого  файла, в  которые входит  в  качестве выражения имя поля  Name, не отвечают в  полной мере  файлу  employee.dbf. Следовательно, для поиска по  индексу файл  employee.cdx  необходимо  предварительно  переиндексировать.

Атрибут Ключ   является  объектом  агрегатного типа.  Число  компонентов  объекта  равно  числу полей  DBF-файла, на  который ссылается объект  XBase.  Имя  компонента атрибута Ключ  составляется  по  следующей схеме:

дбф.Ключ.<имя поля DBF-файла>

Атрибут применяется для  задания  значений, употребляемых  при  вычислении  индексного выражения.  Полученное значение  индексного  выражения  используется  методом  НайтиПоКлючу в  качестве  ключа  поиска.  Этот  метод  осуществляет  поиск  по  текущему   индексу,  применяя   в   качестве  ключа  выражение,  составленное  из  значений компонентов  атрибута  Ключ.   Например,  с  файлом  employee.dbf используется   индекс

Depart, вычисляемый  по  выражению TRIM(STR(ParentId)) + Name. Чтобы  задать  это выражение    в     программе    1С,    необходимо    определить    два    компонента   ключа: К  л  ю  ч  .  P  a  r  e  n  t  I  d и Ключ.Name.

Пример  1.  Задаются  ключи, обеспечивающие получение  значения  индексного  выражения индекса Depart, равное 12Бараненков.

дбф.Ключ.ParentId = 12;                                              // Значение для TRIM(STR(ParentId))

дбф.Ключ.Name = "Бараненков";                          // Значение для Name

// Индексное выражение TRIM(STR(12)) + "Бараненков" вернет 12Бараненков

Пример  2.  В  файле   employee.dbf ищется  по  индексу  Name, индексное  выражение которого  равно  Name   (см.   процедуру  СоздатьСотр  в   разд.   9.3.1.2),   ключ,  равный Агальцов  Юрий  Алексеевич.

процедура Выполнить()                                            // Связана с кнопкой Пуск обработки Проба  перемдбф;

ОчиститьОкноСообщений(); дбф = СоздатьОбъект("ХВаве"); дбф.ОткрытьФайл("етр1оуее.dbf",    "employee.cdx"); если дбф.Открыта() = 0 тогда

Предупреждение("Файла employee.dbf и/или  файла  employee.cdx

| в каталоге  пользователя нет.");  возврат;

конецЕсли;

дбф.ТекущийИндекс("Name");

дбф.Ключ.Name = "Агальцов Юрий Алексеевич"; дбф.НайтиПоКлючу(1);

Сообщить(дбф.Name);                           // Напечатает Агальцов Юрий Алексеевич конецПроцедуры // Выполнить

Замечание.   При  таком   использовании   метода   НайтиПоКлючу  можно   задать  неполное значение ключа, например

дбф.Ключ.Name = "Ага"; дбф.НайтиПоКлючу(1);

Сообщить(дбф.Name);                                 // Напечатает Агальцов Юрий Алексеевич

Пример  3. В файле  employee.dbf ищется по  индексу Depart, индексное  выражение которого  равно  TRIM(STR(ParentId)) + Name   (см.  процедуру СоздатьСотр  в  разд. 9.3.1.2), Ключ, равный TRIM((STR(12)) + "Бараненков".

Процедура Выполнить()                                           // Связана с кнопкой Пуск обработки Проба  перем дбф;

ОчиститьОкноСообщений();

дбф  = СоздатьОбъект("ХВasе"); дбф.ОткрытьФайл("етр1оуее.dbf,    "employee.cdx"); если дбф.Открыта() = 0 тогда

Предупреждение("Файла employee.dbf и/или  файла  employee.cdx

| в каталоге  пользователя нет.");  возврат;

дбф.ТекущийИндекс("Depart");

дбф.Ключ.ParentId = 12;                   //Значение                 для TRIM(STR(ParentId)) дбф.Ключ.Name  = "Бараненков";          //       Значение для Name дбф.НайтиПоКлючу(1);         //                Ключ равен  12Бараненков Сообщить(дбф.Name);                    //            Напечатает Бараненков Иван Несторович

конецПроцедуры // Выполнить

9.3.2.2.       МЕТОДЫ ОБЪЕКТА XBASE

Приводятся в табл.  9.6.

Методы объекта XBase

Таблица 9.6

Метод

Описание

дбф.СоздатьФайл (DBFфайл,  [СDХфайл]);

Создает файл базы данных (DBF-файл) и, если задан второй параметр, индексный файл (CDX-файл). Имена файлов задаются символьными параметрами DBFфайл и СDХфайл. Если имя не содержит пути, то файлы будут созданы

в каталоге пользователя. Если файлы с указанными

именами на диске имеются, то они будут заменены на новые

дбф.ОткрытьФайл (DBFфайл,  [СDХфайл], [флагЧтения]);

Открывает DBF-файл и, если задан второй параметр, индексный файл. Тип параметров DBFфайл и СDХфайл символьный. Файлы открываются только для чтения, если флагЧтения = 1, и доступны для редактирования, если флагЧтения = 0. По умолчанию флагЧтения = 0

флаг = дбф.Открыта();

Вернет  1, если DBF-файл открыт, или  0-в  противном случае

дбф.ЗакрытьФайл();

Закрывает ранее открытый или созданный DBF-файл. Игнорируется, если DBF-файл не был открыт или создан  до употребления метода. DBF-файл при нормальном завершении программы будет закрыт  и без вызова метода

дбф.ОчиститьФайл();

Выполняет физическое удаление всех записей DBF-файла. После выполнения метода удаленные записи восстановить нельзя

дбф.Сжать( );

Удаляет физически записи DBF-файла, имеющие пометку удаления

дбф.Переиндексировать();

Выполняет переиндексацию индексного  файла. Применяется для восстановления порядка следования записей в индексном файле, который может быть нарушен при аварийном завершении программы или при модификации DBF-файла при закрытом индексном файле

режимТек = дбф.Показывать Удаленные ([режим]);

Устанавливает режим доступа к записям, имеющим пометку удаления. Если режим = 1, то такие записи доступны, и недоступны, если режим = 0. По умолчанию режим = 0. Возвращает текущее  значение режима

Метод

Описание

флаг = дбф.Первая();

Перемещает DBF-файл на первую запись. Если задан текущий индекс, то первой является запись, отвечающая  при возрастающем индексе его наименьшему значению или наибольшему при убывающем индексе. Вернет  1 в случае успеха или 0 при неудаче

флаг = дбф.Последняя();

Перемещает DBF-файл на последнюю запись. Если задан текущий индекс, то последней является запись, отвечающая  при возрастающем индексе его наибольшему  значению или наименьшему при убывающем индексе. Вернет  1 в случае успеха или 0 при неудаче

флаг = дбф.Следующая();

Перемещает DBF-файл на следующую  запись. Если задан текущий индекс, то порядок записей определяется этим индексом. Вернет  1 в случае успеха или 0 при неудаче

флаг = дбф.Предыдущая();

Перемещает DBF-файл на предшествующую запись. Если задан текущий индекс, то порядок записей определяется этим индексом. Вернет  1 в случае успеха или 0 при неудаче

нЗап = дбф.НомерЗаписи();

Возвращает номер записи DBF-файла. Вернет 0, если файл  позиционирован перед первой или вслед за последней записью

дбф.Перейти(нЗап);

Перемещает DBF-файл на запись, имеющую номер нЗап. Методу  всегда доступны записи, имеющие пометку  удаления. Если нЗап < 0 или нЗап > дбф.КоличествоЗаписей(),

то возникнет информационная ошибка

флаг = дбф.ВКонце();

Вернет  1, если DBF-файл находится вслед за своей последней записью, или О-в противном случае

флаг = дбф.ВНачале();

Вернет  1, если DBF-файл находится перед своей первой записью, или О-в противном случае

имяИндТек =дбф.Текущий Индекс([ИмяИнд]);

Устанавливает, если задан параметр имяИнд, текущий индекс. Возвращает значение текущего индекса до вызова метода.  Параметр имяИнд и результат имеют символьный тип

флаг = дбф.Найти

(ключ, [режим]);

Ищет ключ, используя текущий индекс. Вернет 1 в случае успеха или 0 при неудаче.  При успешном поиске позиционирует файл на найденной записи. Если числовой параметр режим есть:

•  0, то ищется запись, индексное выражение которой точно  равно ключу;

•  1, то ищется запись, индексное выражение которой больше  или равно ключу;

•  2, то ищется запись, индексное выражение которой больше  ключа;

•  -1, то ищется запись, индексное выражение которой меньше или равно ключу;

•   -2, то ищется запись, индексное выражение которой меньше ключа.

По умолчанию режим = 0. Используется для простых индексов

Источник: Бартеньев О. В. 1С:Предприятие:  программирование для  всех.  Базовые объекты и расчеты на одной дискете. М.: Диалог-МИФИ, 2005. 464 с.

По теме:

  • Комментарии

1 комментарий

  1. Serg says:

    Спасибо, долго искал про составной ключ, здесь понятнее, чем на мисте