1с ошибка создания файла dbf

   НевестаПрограмМИСТА

18.10.10 — 10:05

Всем доброе утро! Помогите, пожалуйста!

Пытаюсь создать программно файл DBF.

Делаю примерно следующее:

ДБФ = Новый XBase();

   ДБФ.поля.Добавить(«A», «S», 30);

   ДБФ.поля.Добавить(«B», «S», 30);

   ДБФ.поля.Добавить(«C», «S», 30);

   ДБФ.поля.Добавить(«D», «S», 30);

   ДБФ.поля.Добавить(«E», «S», 30);

   ДБФ.поля.Добавить(«F», «S», 30);

   ДБФ.поля.Добавить(«G», «S», 30);

   ДБФ.АвтоСохранение = Истина;

   ИмяФайла = «b73056» + Прав(Основание.Номер, 2);

   
   ИмяФайлаБазы  =  «\E:ShareВнешниеОбработкиДляКАЭлектронный реестр Сбербанка» + ИмяФайла + «.dbf»;

   ДБФ.СоздатьФайл(ИмяФайлаБазы);

   ДБФ.Кодировка = КодировкаXBase.OEM;

   ДБФ.АвтоСохранение = Истина;

   ДБФ.ОткрытьФайл(ИмяФайлаБазы);

// 1-я строка

   ДБФ.Добавить();

…….

ДБФ.Записать();

ДБФ.ЗакрытьФайл();

Сообщить(«Формирование DBF-файла завершено»);

Сообщить(«Путь к файлу: » + ИмяФайлаБазы);

Выдает ошибку:{Форма.Форма.Форма(35)}: Ошибка при вызове метода контекста (Добавить)

   ДБФ.Добавить();

по причине:

Перед выполнением операции нужно открыть базу

Я так понимаю, что не открывает, потому что не создает. Смотрю в обработчике при методах СоздатьФайл(), ОткрытьФайл() и Добавить() пишет: Обращение к процедуре к процедуре объекта как к функции.

Находила на форумах подобные ошибки, но так и не разобралась.

Помогите, пожалуйста. Заранее всем спасибо.

   Ajbolitov

1 — 18.10.10 — 10:15

попробуй убрать строчку
ДБФ.ОткрытьФайл(ИмяФайлаБазы);

   НевестаПрограмМИСТА

2 — 18.10.10 — 10:18

Убрала. Ничего не изменилось (((

   dragonIMV

3 — 18.10.10 — 10:22

ФайлБТ.ОткрытьФайл(«X:CASHLOADPluCash1.dbf»);
       Если Не ФайлБТ.Открыта() Тогда
           ФайлБТ.СоздатьФайл(«X:CASHLOADPluCash1.dbf»);
       Иначе
           //ФайлБТ.ОчиститьФайл();
       КонецЕсли;

это кусок из обработки выгрузки на кассу…под рукой вот была…

далее, кодировку указывал я после открытия/создания файла, и работает нормально это…да и автосохранение убрать после открытия надо

   dragonIMV

4 — 18.10.10 — 10:23

далее, имя файла не более 8 символов!!!!! для dbf
и все на латинице…кирилицу нельзя использовать

   НевестаПрограмМИСТА

5 — 18.10.10 — 10:23

(3) Спасибо. Сейчас попробую

   dragonIMV

6 — 18.10.10 — 10:25

еще вопрос, выполняется на клиенте или на сервере?
сервер когда выполняет может не видеть доступ через сеть, есть там проблемы разные с этим…

да и клиент не всегда видит доступ, попробую пока название файла локальное, на том же компе, где идет работа с 1Ской

   НевестаПрограмМИСТА

7 — 18.10.10 — 10:30

(6) пока всё на клиенте.
Попробовала (3) тоже самое:
{Форма.Форма.Форма(40)}: Ошибка при вызове метода контекста (Добавить)
   ДБФ.Добавить();
по причине:
Перед выполнением операции нужно открыть базу
Для (4) там ровно 8 символов: латинская «b»  и ещё 7 цифр

   dragonIMV

8 — 18.10.10 — 10:32

(7) в чем работаете вообще? что за платформа и конфигурация?

   НевестаПрограмМИСТА

9 — 18.10.10 — 10:36

(8) Комплексная автоматизация (редакция 1.1)

   dragonIMV

10 — 18.10.10 — 10:38

файл уже есть хоть какой то? проверьте в месте выгрузки, есть ли файл уже созданный с таким названием

   dragonIMV

11 — 18.10.10 — 10:39

бывает ошибка такая, если файл есть созданный, но как то неправильно заполненный…либо файл dbf в этот момент открыт кем то (например в Excel)…

   НевестаПрограмМИСТА

12 — 18.10.10 — 10:43

(10-11) дело в том, что файла созданного как раз и нет. Пробовала даже так: не создавала файл программно, а пыталась открыть уже готовый файл, не открывает, выдает ту же ошибку

   Salvador Limones

13 — 18.10.10 — 10:44

(12) Путь менять пробовала, на локальный. Может с шарой проблемы?

   dragonIMV

14 — 18.10.10 — 10:44

ошибка идет на «ДБФ.ОткрытьФайл(ИмяФайлаБазы);» ? (если смотреть пошагово)

   НевестаПрограмМИСТА

15 — 18.10.10 — 10:46

(14) нет, на ДБФ.Добавить()
Ругается, что база не открыта

   НевестаПрограмМИСТА

16 — 18.10.10 — 10:48

+ (15) {Форма.Форма.Форма(41)}: Ошибка при вызове метода контекста (Добавить)
   ДБФ.Добавить();
по причине:
Перед выполнением операции нужно открыть базу

   dragonIMV

17 — 18.10.10 — 10:51

сделай так попробуй:

ДБФ = Новый XBase();
   ДБФ.поля.Добавить(«A», «S», 30);
   ДБФ.поля.Добавить(«B», «S», 30);
   ДБФ.поля.Добавить(«C», «S», 30);
   ДБФ.поля.Добавить(«D», «S», 30);
   ДБФ.поля.Добавить(«E», «S», 30);
   ДБФ.поля.Добавить(«F», «S», 30);
   ДБФ.поля.Добавить(«G», «S», 30);

         ИмяФайла = «b11111»;
   ИмяФайлаБазы  =  КаталогВременныхФайлов() + ИмяФайла + «.dbf»;

   ФайлБТ.ОткрытьФайл(ИмяФайлаБазы);
       Если Не ФайлБТ.Открыта() Тогда
           ФайлБТ.СоздатьФайл(ИмяФайлаБазы);      
       КонецЕсли;

       ДБФ.Кодировка = КодировкаXBase.OEM;
   ДБФ.АвтоСохранение = Истина;

  // 1-я строка

   ДБФ.Добавить();
…….
ДБФ.Записать();
ДБФ.ЗакрытьФайл()

   dragonIMV

18 — 18.10.10 — 10:51

стоп…
первая строка не ДБФ = Новый XBase();
а ДБФ = Новый XBase;

у меня без скобок работает все

   НевестаПрограмМИСТА

19 — 18.10.10 — 10:51

(17) сейчас попробую

   НевестаПрограмМИСТА

20 — 18.10.10 — 10:52

(18) ок

   dragonIMV

21 — 18.10.10 — 10:59

вот сейчас в 1С 8.1 УТ 10.3.6.8 сделал и все сработало, файл создался без ошибок:

ФайлБТ = Новый XBase();
   ФайлБТ.поля.Добавить(«A», «S», 30);
   ФайлБТ.поля.Добавить(«B», «S», 30);
   ФайлБТ.поля.Добавить(«C», «S», 30);
   ФайлБТ.поля.Добавить(«D», «S», 30);
   ФайлБТ.поля.Добавить(«E», «S», 30);
   ФайлБТ.поля.Добавить(«F», «S», 30);
   ФайлБТ.поля.Добавить(«G», «S», 30);

         ИмяФайла = «b11111»;
   ИмяФайлаБазы  =  КаталогВременныхФайлов() + ИмяФайла + «.dbf»;

   ФайлБТ.ОткрытьФайл(ИмяФайлаБазы);
   Если Не ФайлБТ.Открыта() Тогда
       ФайлБТ.СоздатьФайл(ИмяФайлаБазы);      
   КонецЕсли;

   Если Не ФайлБТ.Открыта() Тогда
       Сообщить («Нет доступа к серверу Crystal Set, проверьте соединение. Выгрузка цен не возможна! Выгрузку цен необходимо осуществить в ручном режиме.»);
       Отказ=Истина;
   КонецЕсли;

               ФайлБТ.Кодировка = КодировкаXBase.OEM;
   ФайлБТ.АвтоСохранение = Истина;

  // 1-я строка

   ФайлБТ.Добавить();
   ФайлБТ.A = «первый»;
   ФайлБТ.B = «второй»;
   ФайлБТ.C = «третий»;
   ФайлБТ.D = «четвертый»;

   ФайлБТ.Записать();
   ФайлБТ.ЗакрытьФайл();

   НевестаПрограмМИСТА

22 — 18.10.10 — 11:01

Ура!!! Создался! ))) Но почему-то не заполнился… может я его не через то, что надо смотрю… Через дэжавю можно смотреть?

   dragonIMV

23 — 18.10.10 — 11:02

ФайлБТ.Добавить();

…..
ФайлБТ.Записать();

это надо в цикле делать, при каждой новой строке…

т.е. записывать файл после добавление каждой строки

   dragonIMV

24 — 18.10.10 — 11:09

если что, пиши в аську…если будут по dbf вопросы…
я сейчас на обед ушел))

   НевестаПрограмМИСТА

25 — 18.10.10 — 11:11

(24) ок )))

   НевестаПрограмМИСТА

26 — 18.10.10 — 11:41

У меня после каждого добавления строки стоит ДБФ.Записать().
Открываю через Дэжавю и ничего не вижу… По отладчику всё записывается

  

НевестаПрограмМИСТА

27 — 18.10.10 — 12:41

огромное спасибо за помощь! У меня всё получилось )))

  1. Здравствуйте! Создаю DBF файл по данным из документа

        Запрос = Новый Запрос;
        Запрос.Текст ="ВЫБРАТЬ
                      |    ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия,
                      |    ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер,
                      |    ФИОФизЛицСрезПоследних.Фамилия,
                      |    ФИОФизЛицСрезПоследних.Имя,
                      |    ФИОФизЛицСрезПоследних.Отчество,
                      |    ПеречислениеПодотчетныхСуммРаботникиОрганизации.НомерЛицевогоСчета,
                      |    ПеречислениеПодотчетныхСуммРаботникиОрганизации.Сумма,
                      |    ПеречислениеПодотчетныхСуммРаботникиОрганизации.ФизЛицо
                      |ИЗ
                      |    Документ.ПеречислениеПодотчетныхСумм.РаботникиОрганизации КАК ПеречислениеПодотчетныхСуммРаботникиОрганизации
                      |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних КАК ПаспортныеДанныеФизЛицСрезПоследних
                      |        ПО ПеречислениеПодотчетныхСуммРаботникиОрганизации.ФизЛицо = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо
                      |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних КАК ФИОФизЛицСрезПоследних
                      |        ПО ПеречислениеПодотчетныхСуммРаботникиОрганизации.ФизЛицо = ФИОФизЛицСрезПоследних.ФизЛицо
                      |ГДЕ
                      |    ПеречислениеПодотчетныхСуммРаботникиОрганизации.Ссылка = &Ссылка";
       
        Запрос.УстановитьПараметр("Ссылка", СсылкакНаДокумент);
       
        Выборка = Запрос.Выполнить().Выбрать();
           
            Если Не ЗначениеЗаполнено(ПутьКФайлу) Тогда
                Предупреждение("Не указан путь к файлу DBF!");
                Возврат;
            КонецЕсли;
           
            ДБФ = Новый XBase;
            ДБФ.ОткрытьФайл(ПутьКФайлу);
            ДБФ.ОчиститьФайл();
            ДБФ.Кодировка =КодировкаXBase.OEM;
            ДБФ.АвтоСохранение=Истина;
            Пока Выборка.Следующий() Цикл
               
                ДБФ.Добавить();
                ДБФ.FIOOWNER = ОбщегоНазначения.ПолучитьФамилиюИмяОтчество(Выборка.Фамилия, Выборка.Имя, Выборка.Отчество, Ложь);
                ДБФ.PASPORT = Строка(Выборка.ДокументСерия)+ " "+Строка(Выборка.ДокументНомер);
                ДБФ.ADDRESS = ПолучитьАдресИзКонтактнойИнформации(Выборка.ФизЛицо);
                ДБФ.INDEX   = "";
                ДБФ.PHONENM = ПолучитьТелефонИзКонтактнойИнформации(Выборка.ФизЛицо);
                ДБФ.VTYPE = "370";
                ДБФ.ACCOUNT = Выборка.НомерЛицевогоСчета;
                ДБФ.CASHVAL = Выборка.Сумма;
            КонецЦикла;
            ДБФ.ЗакрытьФайл();
    

    выскакивает ошибка

    {Документ.ПеречислениеПодотчетныхСумм.Форма.ФормаВыгрузкиВДБФ.Форма(142)}: Ошибка при вызове метода контекста (ОчиститьФайл)
    ДБФ.ОчиститьФайл();
    по причине:
    Перед выполнением операции нужно открыть базу

    в чем дело? Путь указан (ПутьКФайлу — D:Файл.dbf, запись на диск разрешена)


  2. nomad_irk

    Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.890
    Симпатии:
    1.030
    Баллы:
    204

    Файла может не существовать вообще.

  3. т.е. эта процедура открывает уже готовый dbf очищает и добавляет туда записи?


  4. nomad_irk

    Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.890
    Симпатии:
    1.030
    Баллы:
    204

  5. Так и подумал…всё же спасибо большое!


  6. pavl_vs

    Offline

    pavl_vs
    Профессионал в 1С

    Регистрация:
    18 июн 2011
    Сообщения:
    507
    Симпатии:
    42
    Баллы:
    54

    Фрагмент кода создания и записи в ДБФ должен быть таким:

    ДБФ = Новый XBase;
    ДБФ.Кодировка = КодировкаXBase.OEM;
    ДБФ.АвтоСохранение = Истина; 
    ДБФ.СоздатьФайл(ПутьКФайлу);
    ДБФ.Записать(); 
    ДБФ.ОчиститьФайл();
    
    Пока Выборка.Следующий() Цикл 
        ДБФ.Добавить(); 
        ДБФ.FIOOWNER = ОбщегоНазначения.ПолучитьФамилиюИмяОтчество(Выборка.Фамилия, Выборка.Имя, Выборка.Отчество, Ложь); 
        ДБФ.PASPORT = Строка(Выборка.ДокументСерия)+ " "+Строка(Выборка.ДокументНомер); 
        ДБФ.ADDRESS = ПолучитьАдресИзКонтактнойИнформации(Выборка.ФизЛицо); ДБФ.INDEX = ""; 
        ДБФ.PHONENM = ПолучитьТелефонИзКонтактнойИнформации(Выборка.ФизЛицо); 
        ДБФ.VTYPE = "370"; 
        ДБФ.ACCOUNT = Выборка.НомерЛицевогоСчета; 
        ДБФ.CASHVAL = Выборка.Сумма; 
        ДБФ.Записать();
    КонецЦикла;
    
    ДБФ.ЗакрытьФайл();
    

    Помимо ошибки, связанной с очисткой файла, в оригинале есть ошибка в цикле обработки выборки — запись каждой строки начинается с «Добавить» и заканчивается «Записать».


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Тамика

Котовчанин

942 / 482 / 200

Регистрация: 16.02.2010

Сообщений: 3,338

Записей в блоге: 37

1

06.03.2017, 13:32. Показов 5249. Ответов 4

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Всем добрый день!

Пытаюсь написать обработку для выгрузки данных в dbf, нашла разные примеры. В итоге, при попытке записать обработку — выдает ошибку

1C
1
2
3
4
{Обработка.МояОбработка1.Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (СоздатьФайл)
    БД.СоздатьФайл("catalog.dbf"); //создаем файл физически
по причине:
Ошибка создания файла

Вот сама обработка

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Процедура Кнопка1Нажатие(Элемент)
    
    БД = Новый XBase;
    
    БД.Поля.Добавить("SUPPCODE", "S", 24);    
    БД.Поля.Добавить("DRUGNAME", "S", 255);
    БД.Поля.Добавить("MAKER", "S", 64);
    БД.Поля.Добавить("KOD_MORION", "S", 64);
    БД.Поля.Добавить("PRICE", "N", 6);
    
    БД.СоздатьФайл("catalog.dbf");
    БД.ЗакрытьФайл(); 
    
КонецПроцедуры

Заранее спасибо!

Добавлено через 59 минут
Решено! Нужно указывать полный путь…



0



Dethmontt

07.03.2017, 01:32

Не по теме:

Тамика, рыжий, это твой натуральный цвет волос?



0



Тамика

07.03.2017, 17:21

 [ТС]

Не по теме:

Dethmontt, увы, да :D



0



Dethmontt

07.03.2017, 18:05

Не по теме:

Цитата
Сообщение от Тамика
Посмотреть сообщение

Dethmontt, увы, да

а мне нравиться… :-[



0



Тамика

07.03.2017, 22:18

 [ТС]


    Создание обработки для выгрузки данных в dbf: Ошибка создания файла

Не по теме:

Цитата
Сообщение от Dethmontt
Посмотреть сообщение

а мне нравиться…

Рада слышать, спасибо :-[



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

07.03.2017, 22:18

5

Есть файл соответствия .DBF и индексы в .cdx. Есть цикл

На итерации 4110 строка БД_ТС.Следующая; перестает работать, не переходит к следующей строке xBase, цикл становется бесконечным

1. в какой строке ошибка 2. описание ошибки

Ошибки нет, просто цикл уходит в бесконечность

а если использвать БД.КоличествоЗаписей и БД.Перейти(НомерЗаписи) ?

Я открыл файл Excel’ем с таблицей вроде все в порядке, строка 4110 ничем не отличается, если пройти отладкой до этой строки данные меняются, т. е. есть переход к следующей строке, а после данные не меняются

Пробовал восстановить файл несколькими программками, все сказали что проблем нет. У Xbase есть метод переиндексировать. он выдает ошибку создания файла, директория без символов, руских букв и пробелов и доступна для записи из 1С

тогда что-то в базе не то… для начала попробуй пройтись по файлу CDBF потом можно попробовать пропатчить реестр [HKEY_LOCAL_MACHINESOFTWAREMicrosoftJet4.0EnginesXbase] «DataCodePage»=»ANSI» «BDE»=dword:00000002

Дело точно в файле соответствия или в cdx, так как у меня есть старая копия этих файлов и с ними загрузка проходит

это патч драйвера, выравнивание границы записи на 2 байта и присвоение кодировки по дефолту… патч позволяет корректно работать со старыми форматами дбф созданных драйверами фокса и 1с

Прости за наглость, можешь перевести в текст батника?

сохрани в файле с расширением reg, и пкм…

Идея БД.Перейти(НомерЗаписи) на строке 4110 сработала, но что это было?

Могут быть проблемы при добавлении этих записей?

на всякий случай сохрани старое из реестра… на 10 винде не юзал… и еще, изменения вступают в силу после перезагрузки драйвера (гарантировано при перезргрузки компа)

суть вместо цикла с проверкой «на конец файла/последнюю запись» проще использовать позиционирование по номеру записи это надежнее и проще

как бы не проще [1C] КолЗап = БД.КоличествоЗаписей; Для НомЗап = 1 По КолЗап Цикл    БД.Перейти(НомЗап);    … КонецЦикла; [1C]

И индекс не открывать, раз он все равно битый. А сортировать уже потом ВременнуюТС.

Вроде все сработало, но что там было не поянтно

Тэги:

Комментарии доступны только авторизированным пользователям

Содержание:

1.    Создание файла dbf в 1С

2.    Редактирование и чтение dbf

3.    Процесс поиск и удаления строк в файле dbf 1С

Сегодня рассмотрим работу с одним из самых популярных форматов для обмена данными с 1С.

Этот формат обмена данными с 1С представляет собой подобие таблицы Excel и используется для хранения данных в различных СУБД. Также есть его модификации, всех их называют xBase.

В 1С для работы с таким форматом предусмотрен объект xBase. С его помощью можно создавать, читать и редактировать файлы dbf в 1С.
Важно чтобы имя файла соответствовало критериям 1С. Его длина не может превышать восемь символов.

Теперь разберем, как работать с xBase.  

1.    Создание файла dbf в 1С

Обращаю внимание, что запись нужно производить после каждой введенной строки.
Файл можно открыть специализированным приложением типа DBFView или с помощью MS Excel.

В итоге у нас получится такой файл:  

 

2.    Редактирование и чтение dbf

После выполнения кода в 1С суммы в файле изменятся на отрицательные:  


3.    Поиск и удаление строк в файле dbf 1С

Видим, что работать с файлами формата dbf достаточно просто. И работать с xBase можно как на сервере, так и на клиенте – это очень удобно.


Специалист компании ООО «Кодерлайн»

Хоменко Вадим

  • 1с ошибка совместного доступа к файлу при открытии конфигурации
  • 1с ошибка совместного доступа к файлу xls
  • 1с ошибка совместного доступа к файлу versions
  • 1с ошибка совместного доступа к файлу v8srvr
  • 1с ошибка совместного доступа к файлу snccntx dat