Методы
Метод | Описание |
Открыть(<ИмяФайла>) | Открыть текстовый файл с указанным именем. |
КоличествоСтрок() | Возвращает число строк в тексте. |
ПолучитьСтроку(<НомерСтроки>) | Возвращает строку текста с заданным номером. |
ДобавитьСтроку(<Строка>) | Добавить строку в конец текста. |
УдалитьСтроку(<НомерСтроки>) | Удалить строку с указанным номером. |
ВставитьСтроку(<НомСтроки>,<Строка>) | Вставить строку с указанным номером. |
ЗаменитьСтроку(<НомерСтроки>,<Строка>) | Заменить строку с указанным номером. |
Шаблон(<Флаг>) | Включить/Отключить режим добавления строк по шаблону. Шаблон означает, что в квадратных скобках указаны имена переменных или выражения на встроенном языке. При формировании такой строки 1С вычислит все выражения в квадратных скобках и подставит их в строку. Пример, "Сотрудник с табельным номером [Сотрудник.Код] обработан." При формировании такой строки в режиме шаблона результирующая строка будет иметь вид: "Сотрудник с табельным номером 123 обработан." |
ФиксШаблон(<Флаг>) | В отличие от метода Шаблон, ограниченные квадратными скобками поля замещаются значениями выражений с сохранением своей длины в символах, то есть обрезаются, если поле короче результата вычисления выражения и дополняются пробелами если длиннее. Если результат числовой, то в границах поля строка прижимается к правой границе. |
Показать(<Заголовок>,<ИмяФайла>) | Открыть окно редактирования текста. |
ТолькоПросмотр(<Режим>) | Разрешить / запретить возможность редактирования текста в окне просмотра. Вызывается до метода Показать. |
Очистить() | Очищает содержимое текстового документа. Его использование позволяет заново заполнить содержимое текстового документа. |
КодоваяСтраница(<Режим>) | Установить режим кодировки текста. 0 - windows-кодировка, 1 - DOS-кодировка. Возвращает текущее числовое значение режима кодировки (на момент до исполнения метода). |
Записать(<ИмяФайл>) | Записать текст в файл с указанным именем. |
Пример
ТекстДок = СоздатьОбъект("Текст");
ТекстДок.Открыть("catalog.txt");
ТекстДок.ЗаменитьСтроку(52, "Установка оборудования......" + Стоимость);
ТекстДок.ВставитьСтроку(53, "Замена оборудования... ");
ТекстДок.УдалитьСтроку(10);
ТекстДок.ДобавитьСтроку("Конец файла");
ТекстДок2 = СоздатьОбъект("Текст");
ТекстДок2.Шаблон(1);
Для н = 1 По ТекстДок.КоличествоСтрок(1) Цикл
..........стр = ТекстДок.ПолучитьСтроку(н);
..........стр2 = "[н]" + стр;
.........ТекстДок2.ДобавитьСтроку(стр2);
КонецЦикла;
ТекстДок2.Записать("catalog2.txt");
ТекстДок2.ТолькоПросмотр(1);
ТекстДок2.Показать();
DBF-файлы
Чтение файла DBFЗапись в файл DBFРабота со структурой файла DBF Работа с удаленными записями Работа с индексами |
Чтение файла DBF
В данном случае, мне кажется, что проще написать программу и прокомментировать ее, чем делать что-то еще. Вы уже такие продвинутые, раз добрались до этой главы! Я горжусь вами!
Файл = создатьОбъект(" XBASE "); //создаем ссылку на файл DBF
Файл. ОткрытьФайл ("catalog.dbf"); //открываем файл на диске
Файл.КодоваяСтраница(1); //задаем кодировку: 0 - windows, 1 - DOS
Если Файл. Открыта ()=0 Тогда //проверяем, удалось ли открыть файл
........Сообщить("Не удалось открыть файл!");
КонецЕсли;
Файл. Первая (); //позиционируемся на первой записи
Пока Файл. ВКонце ()=0 Цикл //пока не дошли до конца, крутим цикл
.......НомерЗаписи = Файл. НомерЗаписи (); //получаем номер текущей записи
.......НазвТовара = Файл. NAME; //получаем значение поля
.......Цена = Файл. ПолучитьЗначениеПоля ("PRICE"); //так тоже можно, но чуть медленнее
.......Файл. Следующая (); //переходим на следующую запись
КонецЦикла;
Файл. Последняя (); //позиционируемся на первой записи
Пока Файл. ВНачале ()=0 Цикл //пока не дошли до начала, крутим цикл
.......НазвТовара = Файл.NAME;
.......Цена = Файл.PRICE;
.......Файл. Предыдущая (); //переходим на предыдущую запись
КонецЦикла;
Для н = 1 По Файл. КоличествоЗаписей () Цикл //здесь все понятно, по-моему
......Файл. Перейти (н); //позиционируемся на определенной записи
.......НазвТовара = Файл.NAME;
.......Цена = Файл.PRICE;
КонецЦикла;
Файл. ЗакрытьФайл (); //не забывайте пожалуйста
Запись в файл DBF
Файл = создатьОбъект(" XBASE "); //создаем ссылку на файл DBF
//определяем структуру файла
//Синтаксис: ДобавитьПоле(<Название>,<Тип>,<Длина>,<Точность>)
Файл. ДобавитьПоле ("NAME","S",50,0);
Файл. ДобавитьПоле ("PRICE","N",10,2);
Файл. СоздатьФайл ("catalog.dbf"); //создаем файл физически
СпрТовары.ВыбратьЭлементы();
Пока СпрТовары.ПолучитьЭлемент()=1 Цикл
.......Файл. Добавить ();
.......Файл.NAME = СпрТовары.Наименование;
.......Файл.УстановитьЗначениеПоля("PRICE",СпрТовары.Цена) //так тоже можно;
.......Файл. Записать ();
КонецЦикла;
Файл. ЗакрытьФайл (); //не забывайте пожалуйста
Работа со структурой файла DBF
Например, создадим файл, идентичный по структуре исходному.
//При этом применяется метод ОписаниеПоля, который возвращает характеристики поля с указанным номером
//синтаксис: ОписаниеПоля(<НомерПоля>,<НазваниеПоля>,<Тип>,<Длина>,<Точность>)
Файл1 = СоздатьОбъект("XBASE");
Файл2 = СоздатьОбъект("XBASE");
Файл1 = ОткрытьФайл("file1.dbf");
Для н = 1 По Файл1.КоличествоПолей() Цикл
........НазвПоля = "";
........Тип = "";
........Длина = 0;
........Точность = 0;
........Файл1. ОписаниеПоля (н,назвПоля,Тип,Длина,Точность);
........Файл2.ДобавитьПоле(назвПоля,Тип,Длина,Точность);
КонецЦикла;
Для работы с файлом DBF неизвестной структуры часто применяются следующие методы:
ПолучитьЗначениеПоля (<ИмяПоля>);
УстановитьЗначениеПоля (<ИмяПоля>,<значение>);
Работа с удаленными записями
Файлы DBF устроены таким образом, что удаление записи не приводит к физическому удалению записи из файла. Запись просто помечается на удаление и пропускается при переборе. Таким образом размер файла остается прежним. Чтобы физически удалить все помеченные на удаление записи нужно применить метод Сжать. Средства встроенного языка позволяют работать с такими записями, перебирать их и даже отменять пометку на удаление.
Файл. ПоказыватьУдаленные (1);
Файл.Первая();
Пока Файл.ВКонце()=0 Цикл
......Если Файл. ЗаписьУдалена ()=1 Тогда
............Файл.Восстановить();
......КонецЕсли;
......Файл.Следующая();
КонецЦикла;
Файл.Первая();
Пока Файл.ВКонце()=0 Цикл
......Если Файл.PRICE < 1000 Тогда
............Файл. Удалить ();
......КонецЕсли;
......Файл.Следующая();
КонецЦикла;
Файл. Сжать (); //удалить записи физически
Можно удалить все записи в файле одним движением. При этом они физически удаляются и не могут быть восстановлены.
Файл. ОчиститьВсе ();
Стоит еще отметить про метод Очистить (), что он очищает все поля текущей записи. Атрибуты, соответствующие полям типа "строковый" приобретают значение «пустая строка», числовой — 0, логический — 0, дата — «пустая дата».
Работа с индексами
Для организации упорядочивания содержимого файла БД и поиска в ней по значению одного или нескольких полей применяется механизм индексов. Его применение можно сравнить с сортировкой картотеки по определенному признаку (совокупности признаков). Однако, в отличие от картотеки, файл БД может иметь сразу несколько индексов, и, соответственно, являться упорядоченным одновременно по нескольким признакам. Индексы хранятся в индексном файле. Индексный файл может содержать информацию более чем об одном индексе. Рекомендуется для одного файла DBF иметь один индексный файл, в котором хранятся все индексы для этого файла.
Каждый индекс имеет наименование, признак уникальности, выражение индекса и фильтр. Наименование индекса используется для идентификации индекса. Выражение индекса и фильтр представляют собой написанные на специальном языке выражения, вычисление значения которых для каждой записи позволяет определить ее место при упорядочивании и необходимость помещения ее в упорядоченный список (индекс может содержать упоминание не обо всех записях таблицы, а только об удовлетворяющих выражению фильтра). Уникальный индекс (имеющий установленным признак уникальности) позволяет иметь в индексе ссылки на записи только с различным значением индексного выражения.
Основное правило: индекс нужен, чтобы быстро искать нужную запись.
DBF-ФАЙЛ | Индекс по фамилии | ||||||||||||||||||||||||||||
|
|
Нужно быстро найти Комаров. В неупорядоченном исходном файле искать его можно только последовательным перебором всех записей, что будет очень долго при большом числе записей. В индексе найти Комарова можно очень быстро, поскольку индекс отсортирован по полю Фамилия. При этом мы узнаем физический номер записи в файле 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С существует специальный язык для задания выражений и фильтра индекса. Подробнее о нем, смотрите в документации на встроенный язык.
Файловая система
Для работы с файлами и каталогами в 1С:Предприятие используется специальный объект "ФС" (файловая система). Средства языка 1С имеют возможности поиска, копирования, переименования, удаления и совершения других операций с файлами и каталогами.