На самом деле коды ошибок 1Cv7 не являются секретом. Правда, наряду с “прозрачными” ошибками (смысл которых понятен любому), встречаются и ошибки маловразумительные (например, 920 – на практике она может означать что угодно, и память тут, как правило, ни при чем).. лично мне при виде этого списка сразу вспоминается классика: “Если компилятор не обнаружил ошибок в Вашем проекте – сообщите об этом системному программисту, он исправит ошибки в компиляторе” ;-)
10 Ошибка закрытия файла
20 Ошибка создания файла
30 Ошибка определения длины файла
40 Ошибка установки длины файла
50 Ошибка при попытке заблокировать файл
60 Ошибка при открытии файла
70 Ошибка чтения файла
80 Ошибка удаления файла
90 Ошибка переименования файла
100 Ошибка позиционирования в файле
110 Ошибка снятия блокировки с файла
120 Ошибка записи в файл
200 Файл не является базой данных DBF-формата
210 Неопознанное имя поля
220 Неопознанный тип поля
230 Запись слишком длинная
300 Индексный файл не содержит информации о записи
310 Нарушение структуры индексного файла
330 Указанное имя индекса недоступно
340 Ошибка уникальности индекса
400 Ожидается запятая или скобка
410 Выражение не завершено
422 IFF требует параметров одинаковой длины
425 У STR и SUBSTR 2-й и 3-й параметры – константы
430 Неверное число параметров
440 Слишком сложное выражение
450 Пропущена правая скобка
460 Неверный тип подвыражения
470 Неопознанная функция
480 Неопознанный оператор
500 Выражение не завершено символом двойной кавычки
920 Недостаточно памяти
| опубликовано: 27 Сентябрь 2008, 18:48
Для организации упорядочивания содержимого файла БД и поиска в ней по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл БД может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам. Индексы хранятся в индексном файле. Индексный файл может содержать информацию более чем об одном индексе. Рекомендуется для одного файла DBF иметь один индексный файл, в котором хранятся все индексы для этого файла.
Каждый индекс имеет наименование, признак уникальности, выражение индекса и фильтр. Наименование индекса используется для идентификации индекса. Выражение индекса и фильтр представляют собой написанные на специальном языке выражения, вычисление значения которых для каждой записи позволяет определить ее место при упорядочивании и необходимость помещения ее в упорядоченный список (индекс может содержать упоминание не обо всех записях таблицы, а только об удовлетворяющих выражению фильтра). Уникальный индекс (имеющий установленным признак уникальности) позволяет иметь в индексе ссылки на записи только с различным значением индексного выражения.
Основное правило: индекс нужен, чтобы быстро искать нужную запись.
DBF-ФАЙЛ:
1 Иванов
2 Абдулов
3 Барабанов
4 Мирнов
5 Раскольников
6 Комаров
Индекс по фамилии (по алфавиту):
Абдулов 2
Барабанов 3
Иванов 1
Мирнов 4
Комаров 6
Раскольников 5
Нужно быстро найти Комаров. В неупорядоченном исходном файле искать его можно только последовательным перебором всех записей, что будет очень долго при большом числе записей. В индексе найти Комарова можно очень быстро, поскольку индекс отсортирован по полю Фамилия. При этом мы узнаем физический номер записи в файле DBF и производим прямое позиционирование на нужную запись.
После создания структуры базы данных можно добавить индексы следующим образом:
//Синтаксис: ДобавитьИндекс(<Название>, <Выражение>, <Уникальность>, <Убывание>, <Фильтр>)
Файл = СоздатьОбъект(“XBase”);
Файл.ДобавитьПоле(“NAME”, 1, 19, 3);
Файл.ДобавитьПоле(“PRICE”, 2, 25, 0);
Файл.ДобавитьИндекс(“IDXCODE”, “CODE”, 1, 0, “”);
Файл.ДобавитьИндекс(“IDXNAME”, “NAME”, 0, 0, “”);
Файл.ДобавитьИндекс(“IDXNAMECODE”, “NAME+CODE”, 0, 0, “”);
Файл.СоздатьФайл(“mydb.dbf”, “mydb.cdx”);
//1-й вариант
Файл.ТекущийИндекс(“IDXNAME”);
Файл.Найти(“Иванов”,0); //передается значение и режим поиска
//2-й вариант
Файл.ТекущийИндекс(“IDXNAMECODE”);
Файл.Ключ.NAME = “Иванов”;
Файл.Ключ.CODE = 123;
Файл.НайтиПоКлючу(0);
//после сбоя рекомендуется заново переформировать все индексы
Файл.Переиндексировать();
В 1С существует специальный язык для задания выражений и фильтра индекса. Подробнее о нем, смотрите в документации на встроенный язык.
| опубликовано: 28 Август 2008, 08:46
//так мы узнаем, какая была у сотрудника
//категория на определенную дату
Катег = СпрСотр.Категория.Получить(НекаяДата);
//так мы установим сотруднику категорию
//на определенную дату
СпрСотр.Категория.Установить(НекаяДата, НоваяКатегория);
//можно установить дату выборки периодических
//реквизитов для всего справочника
СпрСотр.ИспользоватьДату(НекаяДата);
//тогда ниже уже нельзя использовать Установить и Получить
//доступ к периодическим реквизитам становится
//такой же, как к обычным реквизитам
Катег = СпрСотр.Категория;
СпрСотр.Оклад = 6000;
| опубликовано: 26 Август 2008, 08:26