1c linux xbase dbf

КЛАДР — XBase — Linux / dbf не открывается

Здравствуйте! 1С 8.2 УФ Сервер. Кладр на линуксе не грузится. Файловая и виндовый сервер — все ОК. Пакует файлы в архив, создает на сервере папку /tmp/kladr_files0, отправляет архивы туда, распаковывает их там, и архивы удаляет. Затем пытается грузить данные из dbf. Навтыкал сообщений для отладки:

Если НЕ ФайлИндекса.Существует() Тогда
Сообщить(«Попытка создания индексного файла «+ФайлИндексаКлассификатора);
xB = Новый XBase(ФайлАдресногоКлассификатора);
xB.Кодировка = КодировкаXBase.OEM;

Если xB.Открыта() Тогда
Сообщить(«Попытка создания индексного файла. Открыли базу: «+ФайлАдресногоКлассификатора);
// Для загрузки сразу группы адресных сведений удобно
// пользоваться индексом по всему поле CODE
xB.индексы.Добавить(«IDXCODE», «CODE», Истина);
xB.СоздатьИндексныйФайл(ФайлИндексаКлассификатора);
Сообщить(«Создан индексный файл.»+ФайлИндексаКлассификатора);
xB.ЗакрытьФайл();
Иначе
Сообщить(«Ошибка открытия базы для создания индекса. «+ФайлАдресногоКлассификатора);
Возврат Ложь;
КонецЕсли;
КонецЕсли;

Попытка создания индексного файла /tmp/kladr_files0/kladr.cdx
Ошибка открытия базы для создания индекса. /tmp/kladr_files0/kladr.dbf

Т.е. «xB.Открыта()» возвращает «Ложь».

Сделал так, чтобы файлы кладра не удалялись после обработки. Посмотрел права: rw- для владельца и других пользователей имеются. Вроде все ок. Единственное смущает, что нет прав для запуска ни у кого. Но это же не приложение. При этом у /tmp поллные права на все.

Пошел дальше. Вставил в код костыль, чтобы 1С открывала через XBase ранее созданные файлы по конкретно указанному пути. У ранее созданных файлов полные права на все для всех. Грузим «в лоб». История та же. Код «xB.Открыта()» возвращает «Ложь».

Идеи на текущий момент закончились. Получается XBase впринципе не работает на Linux, по крайней мере на моей сборке.

Вопрос: почему база не открыта и что можно с этим сделать?

Пробовал открывать только на чтение:
xB = Новый XBase(ФайлАдресногоКлассификатора,,Истина);
То же самое.

Источник

1c linux xbase dbf

Здравствуйте! 1С 8.2 УФ Сервер. Кладр на линуксе не грузится. Файловая и виндовый сервер — все ОК. Пакует файлы в архив, создает на сервере папку /tmp/kladr_files0, отправляет архивы туда, распаковывает их там, и архивы удаляет. Затем пытается грузить данные из dbf. Навтыкал сообщений для отладки:

Если НЕ ФайлИндекса.Существует() Тогда
Сообщить(«Попытка создания индексного файла «+ФайлИндексаКлассификатора);
xB = Новый XBase(ФайлАдресногоКлассификатора);
xB.Кодировка = КодировкаXBase.OEM;

Если xB.Открыта() Тогда
Сообщить(«Попытка создания индексного файла. Открыли базу: «+ФайлАдресногоКлассификатора);
// Для загрузки сразу группы адресных сведений удобно
// пользоваться индексом по всему поле CODE
xB.индексы.Добавить(«IDXCODE», «CODE», Истина);
xB.СоздатьИндексныйФайл(ФайлИндексаКлассификатора);
Сообщить(«Создан индексный файл.»+ФайлИндексаКлассификатора);
xB.ЗакрытьФайл();
Иначе
Сообщить(«Ошибка открытия базы для создания индекса. «+ФайлАдресногоКлассификатора);
Возврат Ложь;
КонецЕсли;
КонецЕсли;

Читайте также:  All about linux device drivers

Попытка создания индексного файла /tmp/kladr_files0/kladr.cdx
Ошибка открытия базы для создания индекса. /tmp/kladr_files0/kladr.dbf

Т.е. «xB.Открыта()» возвращает «Ложь».

Сделал так, чтобы файлы кладра не удалялись после обработки. Посмотрел права: rw- для владельца и других пользователей имеются. Вроде все ок. Единственное смущает, что нет прав для запуска ни у кого. Но это же не приложение. При этом у /tmp поллные права на все.

Пошел дальше. Вставил в код костыль, чтобы 1С открывала через XBase ранее созданные файлы по конкретно указанному пути. У ранее созданных файлов полные права на все для всех. Грузим «в лоб». История та же. Код «xB.Открыта()» возвращает «Ложь».

Идеи на текущий момент закончились. Получается XBase впринципе не работает на Linux, по крайней мере на моей сборке.

Вопрос: почему база не открыта и что можно с этим сделать?

Пробовал открывать только на чтение:
xB = Новый XBase(ФайлАдресногоКлассификатора,,Истина);
То же самое.

Источник

1c linux xbase dbf

/// Как прочитать записи файла в формате dbf из 1с 8.3, 8.2 &НаКлиенте Процедура КакПрочитатьЗаписиФайлаВФорматеDBFНаКлиенте(ПутьКФайлуDBF) // О формате dbf - https://ru.wikipedia.org/wiki/DBF Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКФайлуDBF, // путь к базе , // путь к индексу Истина // только чтение ); Сообщить("В таблице " + Таблица.КоличествоЗаписей() + " записей."); Сообщить("Таблица имеет кодировку: " + Таблица.Кодировка); Таблица.Первая(); // перешли к первой записи Пока Не Таблица.ВКонце() Цикл Если Не Таблица.ЗаписьУдалена() Тогда Сообщить( Строка(Таблица.EMPLOYEEID) + " " + Таблица.LASTNAME + " " + Таблица.TITLE + " " + Таблица.ADDRESS ); КонецЕсли; Таблица.Следующая(); // переходим к следующей записи КонецЦикла; Таблица.ЗакрытьФайл(); КонецПроцедуры /// Как найти нужную запись в файле в формате dbf из 1с 8.3, 8.2 &НаКлиенте Процедура КакНайтиНужнуюЗаписьВФайлеВФорматеDBFНаКлиенте(ПутьКФайлуDBF) // О формате dbf - https://ru.wikipedia.org/wiki/DBF // Файлы dbf могут быть очень большими и содержать сотни // тысяч записей. В этом случае полный перебор всех записей, // чтобы найти одну - не очень хорошая идея. Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКФайлуDBF, // путь к базе , // путь к индексу Ложь // открываем на запись ); // Но для того, чтобы искать по ключу - нужен индексный файл, // включающий нужные нам поля. Если бы этот файл уже был у нас, // то мы бы передали его при открытии файла вышле, но у нас его // нет, а потому - займёмся его созданием. // создадим индекс только по полю EMPLOYEEID Таблица.Индексы.Добавить( "INDEX_EMPLOYEEID", // имя индекса "EMPLOYEEID", // выражение индекса Истина // уникальность создаваемого индекса ); КаталогДляЭкспериментов = КаталогДокументов() + "\helpme1s.ru"; СоздатьКаталог(КаталогДляЭкспериментов); ПутьКФайлуИндекса = КаталогДляЭкспериментов + "\test.cdx"; Таблица.СоздатьИндексныйФайл(ПутьКФайлуИндекса); Таблица.ЗакрытьФайл(); // Заново открываем таблицу, уже на чтение и с индексным файлом, // который мы только что создали. Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКФайлуDBF, // путь к базе ПутьКФайлуИндекса, // путь к индексу Истина // только чтение ); // Найдём среди записей ту, у которой поле EMPLOYEEID равно 3. // В таблице всего один индекс INDEX_EMPLOYEEID. Таблица.ТекущийИндекс = Таблица.Индексы.Получить(0); Таблица.Ключ.EMPLOYEEID = "3"; ЗаписьНайдена = Таблица.НайтиПоКлючу("="); Если ЗаписьНайдена Тогда Сообщить("Запись найдена"); Сообщить( Строка(Таблица.EMPLOYEEID) + " " + Таблица.LASTNAME + " " + Таблица.TITLE + " " + Таблица.ADDRESS ); Иначе Сообщить("Запись не найдена"); КонецЕсли; Таблица.ЗакрытьФайл(); КонецПроцедуры /// Как добавить новые записи в уже существующий файл в /// формате dbf из 1с 8.3, 8.2 &НаКлиенте Процедура КакДобавитьНовыеЗаписиВФайлВФорматеDBFНаКлиенте(ПутьКФайлуDBF) // О формате dbf - https://ru.wikipedia.org/wiki/DBF // Добавим в уже знакомый нам test.dbf 2 новые записи о работниках. Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКФайлуDBF, // путь к базе , // путь к индексу Ложь // открываем на запись ); Таблица.Добавить(); Таблица.EMPLOYEEID = "100"; Таблица.LASTNAME = "Милькин"; Таблица.TITLE = "Программист"; Таблица.ADDRESS = "Владивосток"; Таблица.Записать(); Таблица.Добавить(); Таблица.EMPLOYEEID = "101"; Таблица.LASTNAME = "Милькина"; Таблица.TITLE = "Биолог"; Таблица.ADDRESS = "Владивосток"; Таблица.Записать(); Таблица.ЗакрытьФайл(); КонецПроцедуры /// Как удалить определенные записи в файле в формате /// dbf из 1с 8.3, 8.2 &НаКлиенте Процедура КакУдалитьОпределенныеЗаписиИзФайлаВФорматеDBFНаКлиенте(ПутьКФайлуDBF) // О формате dbf - https://ru.wikipedia.org/wiki/DBF // Удалим записи с LASTNAME Милькин и Милькина Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКФайлуDBF, // путь к базе , // путь к индексу Ложь // открываем на запись ); Таблица.Первая(); Пока Не Таблица.ВКонце() Цикл Если СокрЛП(Таблица.LASTNAME) = "Милькин" Или СокрЛП(Таблица.LASTNAME) = "Милькина" Тогда Таблица.Удалить(); КонецЕсли; Таблица.Следующая(); КонецЦикла; // Но Удалить() только ставит пометку на // удаление, а чтобы реально удалить помеченные // на удаление записи нужно вызвать метод Сжать(). Таблица.Сжать(); Таблица.ЗакрытьФайл(); КонецПроцедуры /// Как создать файл в формате dbf с нужными /// полями из 1с 8.3, 8.2 &НаКлиенте Процедура КакСоздатьФайлВФорматеDBFНаКлиенте() // О формате dbf - https://ru.wikipedia.org/wiki/DBF НоваяТаблица = Новый XBase; НоваяТаблица.Кодировка = КодировкаXBase.ANSI; // Описываем колонки таблицы. НоваяТаблица.Поля.Добавить( "FIRSTNAME", // имя колонки "S", // тип 100, // длина ); НоваяТаблица.Поля.Добавить( "AGE", "N", 10, 0 // точность ) ; // Типы ещё бывают: // N - число // S - строка // D - дата // L - булево // F - число КаталогДляЭкспериментов = КаталогДокументов() + "\helpme1s.ru"; СоздатьКаталог(КаталогДляЭкспериментов); ПутьКНовомуDBF = КаталогДляЭкспериментов + "\new.dbf"; НоваяТаблица.СоздатьФайл( ПутьКНовомуDBF, // путь к базе // путь к индексу ); НоваяТаблица.ЗакрытьФайл(); Сообщить("Новый файл создан в '" + ПутьКНовомуDBF + "'."); // И уже теперь можем его открыть и добавить данные. Таблица = Новый XBase; Таблица.ОткрытьФайл( ПутьКНовомуDBF, // путь к базе , // путь к индексу Ложь // открываем на запись ); Таблица.Добавить(); Таблица.FIRSTNAME = "Вова"; Таблица.AGE = 31; Таблица.Записать(); Таблица.Добавить(); Таблица.FIRSTNAME = "Алёна"; Таблица.AGE = 24; Таблица.Записать(); Таблица.ЗакрытьФайл(); КонецПроцедуры /// Скачать и выполнить эти примеры на компьютере

Чтение и запись DBF в языке 1С 8.3, 8.2 (в примерах)

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Читайте также:  Devices powered by linux

Источник

Работа с файлами DBF в 1С 8.3

Анна Викулина

Протестируйте качество нашей работы — получите первую консультацию в подарок.

Одним из самых распространенных форматов баз данных до сих пор остается формат DBF. И неумение работать с ним из 1С – серьезное ограничение профессиональных навыков для любого специалиста. Тем более изучение теории и практика по этому вопросу потребует совсем немного времени. К тому же работа с DBF файлом никаких дополнительных библиотек не требует – все инструменты встроены в платформу 1С 8.3.

Чтение, создание DBF и запись в данный формат

Вся работа с DBF в 1С происходит с помощью специального объекта – xBase. Рассмотрим основные действия с файлами, начав с чтения из конкретного DBF. В первую очередь необходимо расположить файл базы данных в каталоге, куда есть доступ у пользователя. Код для считывания данных в 1С достаточно прост:

Планшет

 ФайлDBF = Новый XBase; ФайлDBF.ОткрытьФайл(ПутьКФайлу,,Истина); 
 Пока НЕ ФайлDBF.ВКонце() Цикл Сообщить("" + ФайлDBF.NAIM +" - "+ФайлDBF.ARTI); ФайлDBF.Следующая(); КонецЦикла; 

Вторая часто встречающаяся задача по взаимодействию с объектом – выгрузка DBF из 1С 8.3. Здесь намного легче создать конечный файл нужного формата программно, чем использовать дополнительно программное обеспечение. Этот алгоритм в 1С тоже достаточно прост и состоит из нескольких строк кода:

 НовыйФайл.Кодировка = КодировкаXBase.ANSI; 
 НовыйФайл.Поля.Добавить("Naim","S",100); НовыйФайл.Поля.Добавить("KOD","N",10); 
 Путь = "D:\Clients.DBF"; НовыйФайл.СоздатьФайл(Путь); НовыйФайл.Записать(); 

Рис.1 Расположение файлов DBF

После того как мы создали файл нужного формата, потребуется выгрузка в DBF данных. Программируя этот процесс, помните о том, что данные ИБ находятся на сервере. Чтобы записать имеющиеся данные из 1С необходимо к предыдущему коду добавить следующий алгоритм:

    Получаем информацию из справочника;

 Контрагенты = Справочники.Контрагенты.Выбрать(); 
 Пока Контрагенты.Следующий() Цикл НовыйФайл.Добавить(); НовыйФайл. Naim = Контрагенты.Наименование; НовыйФайл. KOD = Контрагенты.Код; НовыйФайл.Записать(); КонецЦикла; 

Это основы работы с данным форматом. Существуют и другие способы открыть из 1С DBF, но xBase остается самым простым по синтаксису и пониманию. Поняв, как осуществляется простейшая выгрузка и загрузка из DBF, можно приступать к более сложным элементам, например, использованию индексов для поиска, удалению или изменению конкретных записей в DBF, а также применению технологии ADO.

Читайте также:  Getting git on linux

Источник

Оцените статью
Adblock
detector