Работа с файлами DBF в 1С 8.3 и 8.2
Работа с DBF в 1С 8.3 и 8.2 может быть полезна во многих случаях. Типичные примеры — обмен данными с другими учетными системами, загрузка классификаторов КЛАДР и так далее. DBF — формат хранения файлов баз данных, очень распространенный в России и мире.
Система 1С без проблем умеет работать с такими файлами с помощью встроенного объекта системы XBase. Рассмотрим пример чтения и записи в файл dbf.
Чтение в 1С из файла DBF
Рассмотрим учебный пример, в котором необходимо заполнить нужный массив из колонки файла dbf. Сам файл расположен по адресу «C:\KLADR.DBF».
ПутьКФайлу = "C:\KLADR.DBF"; ФайлDBF = Новый XBase; // создаем новый объект ФайлDBF.ОткрытьФайл(ПутьКФайлу,,Истина); // открытие файла ФайлDBF.Первая(); // устанавливает курсор на первую запись МассивАдресов = Новый Массив; // цикл обрабатывается до тех пор, пока не дошел до последней записи Пока НЕ ФайлDBF.ВКонце() Цикл МассивАдресов.Добавить(ФайлDBF.ADRES); ФайлDBF.Следующая(); //передвигаем курсор далее КонецЦикла; //обязательно закрываем файл, после прекращения работыФайл DBF.ЗакрытьФайл();
Создание файла
Для создания нового файла DBF в 1C 8.2 или 8.3 следует воспользоватся следующим синтаксисом:
НовыйФайл = Новый XBase; //существует два вида кодировки ANSI (win) и OEM (dos) НовыйФайл.Кодировка = КодировкаXBase.ANSI; //описываем колонки: НовыйФайл.Поля.Добавить("ADRES","S",100); НовыйФайл.Поля.Добавить("DOM","N",10) ; Путь = "C:\KLADR.DBF"; НовыйФайл.СоздатьФайл(Путь); НовыйФайл.Записать();
Запись в DBF
Запись происходит так же несложно, как и другие операции. Запишем некоторые значения из массива в ранее созданный файл:
Для Каждого Адрес из МассивАдресов Цикл НовыйФайл.Добавить(); НовыйФайл.ADRES = Адрес; НовыйФайл.Записать(); КонецЦикла; НовыйФайл.ЗакрытьФайл();
Вот и всё, как видите, в работе с такими файлами баз данных из 1С никаких трудностей не имеется.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Другие статьи по 1С программированию.
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Сергей:
Проигнорируйте, если неправ, но в данной конструкции везде надо использовать переменную, которая хранит объект ДБФ при создании
т.е. правильно так будет:
Пока НЕ ФайлDBF.ВКонце() Цикл
МассивАдресов.Добавить(ФайлDBF.ADRES);
ФайлDBF.Следующая(); //передвигаем курсор далее
КонецЦикла;
//обязательно закрываем файл, после прекращения работыФайл
ФайлDBF.ЗакрытьФайл();
Кирилл:
Да, вы правы, это опечатка. Спасибо большое! 🙂
Правильно конечно же: ФайлDBF.Следующая()
А не Файл.Следующая()
Юрий:
Добрый день.
Не являюсь программистом, но столкнулся с данной проблемой. Можете помочь решить ее?
Сергей:
Часто беру информацию с вашего сайта. Спасибо. Понадобилась работа с дбф. Добавлю, что в цикле надо записывать изменения с помощью команды ФайлDBF.Записать(); а не только в конце, после цикла. Иначе будет в файле будет сохранена только последняя строка.
Михаил:
Не знаю, без Записать() нормально всё заполняет
Максим:
трудности есть. например, добавить колонку в уже имеющийся dbf. Приходится создавать новый файл и копировать в него все данные. Не очень удобно, если размеры dbf внушительны.
Дмитрий:
ФайлDBF.ОткрытьФайл(ПутьКФайлу,,Истина); // открытие файла
Истина – открыть для чтения
Ложь – открыть для записи
Но он открывает файл для записи монопольно. А есть в 1С возможность открыть файл для записи не монопольно???
Ильич:
А это как? Может тогда и не монопольный режим для word и exel заодно?
Владимир:
Вообщето для Word и Excel совместная работа уже как лет 5 организована…
Николай:
Почему средствами 1С нельзя создать поле чтобы у него был префикс «_» в начале поля
ирина:
Добрый день! я- совсем несведущая в программировании, но мне сказали, что если дописать программу, что-то в ней поменять, то потом будут сложности с загрузкой обновлений программы. Просто нет возможности пользоваться услугами программиста, а dbf-файл необходим для работы с контрагентом. Извините, если вопрос глупый))
Владимир:
А что если объект Xbase открывает ДБФ, показывает количество строк методом, но по строкам не проходит и «Таблица.ВКонце()» возвращает ИСТИНА на первой же итерации.
Владимир:
В общем разобрался. Сделал вариант чере «Перейти», но всё же интересует данный вопрос.
фыва:
Вопрос