Ошибка создания файла xbase

Странная ошибка при работе с ДБФ

Я

  

ЧессМастер

05.07.18 — 17:16

Всем доброе время суток !

Столкнулся со странной ошибкой при работе с ДБФ.

При попытке программной переиндексации средствами 1С выдает ошибку

Error #: -20

Creating File

Temporary Working File

При этом сам файл ДБФ прекрасно открывается ДБФ редактором.

В файле 225 500 записей.

Кто сталкивался с подобной ошибкой — в чем может быть дело ?

  

hogik

1 — 05.07.18 — 17:47

Надо бы глянуть текст программы. :-)

А вообще:

-20

Creating File

This error could be caused by specifying an illegal file name, attempting to create a file which is open, having a full directory, or by having a disk problem.

  

ЧессМастер

2 — 05.07.18 — 18:29

(1) В тексте программы ничего необычного

Состояние(«Ждите. Идет переиндексация файла таблицы соответствия …»);

Попытка

БД_ТС.Переиндексировать();

Исключение

  Сообщить(«ВНИМАНИЕ! Не удалось переиндексировать

  таблицу соответствия: » + ИмяФайлаТС + »

                     |    » +

ОписаниеОшибки(), СтатусСообщения.ОченьВажное);

КонецПопытки;    

Ошибка возникает при разных именах файлов, разных каталогах и разных компьютерах.

Может проблема в том что при создании индекса не нравится содержимое поля записи ? Но ведь редактором файл открывается.

  

hogik

3 — 05.07.18 — 20:30

Покажите текст про создание БД_ТС.

  

Lama12

4 — 05.07.18 — 20:46

(0) Имя файла должно быть в формате 8.3 и желательно английскими буквами.

  

Lama12

5 — 05.07.18 — 20:47

(4) 8.3 это не версия 1с.

  

DES

6 — 05.07.18 — 20:54

имена полей (индексируемых) должны быть в верхнем регистре

  

ice777

7 — 05.07.18 — 21:04

(0) индексный файл и дбф это два разные файлы, если что )

первый только ключи для поиска, второй- данные, которые у тебя «прекрасно открываются».

по тексту ошибки нет места на диске для индексного

  

ice777

8 — 05.07.18 — 21:06

по жизни видал ситуации, когда индексный больше файла с данными, в выражение для поиска можно было включать и функции. Да и вообще- индексный- это дерево.

  

ЧессМастер

9 — 06.07.18 — 09:33

(4) Имя файла ts.dbf

Имя индексного файла ts.cdx

  

ЧессМастер

10 — 06.07.18 — 09:41

(3)

код создания ДБФ

    БД_ТС = Новый XBase;
    ФайлБД_ТС = Новый Файл(ФайлТС);
    ФайлИндексовБД_ТС = Новый Файл(ИмяФайлаИндексовТС);
    Если ФайлБД_ТС.Существует() Тогда
        Если НЕ БД_ТС.Открыта() Тогда            
    
        БД_ТС.индексы.Добавить("IndSource", "TRIM(ID_Source)", Истина);
                    
            Если ФайлИндексовБД_ТС.Существует() Тогда
                БД_ТС.ОткрытьФайл(ФайлТС, ИмяФайлаИндексовТС, Ложь);
            Иначе
                БД_ТС.ОткрытьФайл(ФайлТС,, Ложь);
                Если НЕ БД_ТС.СоздатьИндексныйФайл(ИмяФайлаИндексовТС) Тогда
                    Сообщить("ВНИМАНИЕ! Не удачная попытка создания индексного файла таблицы соответствия:
                             |    " + ИмяФайлаИндексовТС, СтатусСообщения.ОченьВажное);
                    Возврат Ложь;
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;        
    
    Иначе
        БД_ТС.поля.Добавить("ID_Source",  "S", 50);
        БД_ТС.поля.Добавить("ID_Receive", "S", 50);
        БД_ТС.поля.Добавить("Manager",    "S", 100);
        БД_ТС.поля.Добавить("DateAct",    "D", 8);
        БД_ТС.поля.Добавить("File",       "S", 20);
        БД_ТС.поля.Добавить("Update",        "N", 2);
        БД_ТС.поля.Добавить("Direct",        "N", 2);
        БД_ТС.поля.Добавить("ManagerRar",        "S", 100);     
        БД_ТС.индексы.Добавить("IndSource", "TRIM(ID_Source)", Истина);
                
        Попытка БД_ТС.СоздатьФайл(ФайлТС, ИмяФайлаИндексовТС);
        Исключение
            Сообщить("ВНИМАНИЕ! Нет возможности открыть файл таблицы соответствия: " + ФайлТС + "
                     |    " + ОписаниеОшибки(), СтатусСообщения.ОченьВажное);

            Возврат Ложь;
        КонецПопытки;    
    КонецЕсли;

  

ЧессМастер

11 — 06.07.18 — 09:48

(7) «(0) индексный файл и дбф это два разные файлы, если что )

первый только ключи для поиска, второй- данные, которые у тебя «прекрасно открываются». »

Я это знаю.

У меня в файле ДБФ 225 500 записей (225 ТЫСЯЧ).ЮБез индексного файла поиск записей будет долго идти.

Вопрос почему стала возникать ошибка при переиндексации если места на диске полно, в названии файла все нормально, и ошибка возникает именно с этим файлом на разных компах.

  

ЧессМастер

12 — 06.07.18 — 09:50

(8) «по жизни видал ситуации, когда индексный больше файла с данными»

Файл ДБФ чуть больше 73 Мб, файл индекса (при переиндексации он создается и дорастает до определенного размера а потом выскакивает ошибка в (0) — 18 Мб

  

ЧессМастер

13 — 06.07.18 — 11:09

Какая то реально странность.

В каталоге оставляю только файл ДБФ. CDX удаляю.

Делаю переиндексацию.

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

«Ошибка при вызове метода контекста (Переиндексировать): ошибка создания файла»

При этом в каталоге где лежит ДБФ появляется файл CDX (до переиндексации его не было).

Как может быть ошибка «ошибка создания файла» если файл CDX создается ?

  

olegves

14 — 06.07.18 — 12:29

не знаю как в 8ке, но в клюшках помнится заголовок файла CDX, сформированного 1С, отличался от заголовка такого же в FoxPro. При этом Лис принимал 1Ский файл, но не мог по нему производить поиск.

  

olegves

15 — 06.07.18 — 12:35

+ (14) как вариант, откажись от индексов в пользу Х+1 дбф. 1 — главная, там сделай имя таблицы (всего их будет Х). поиск будет в 2 таблицах:  в Главной по ключевому полю находишь имя таблицы, в которой продолжишь поиск

  

ЧессМастер

16 — 06.07.18 — 13:07

(15) Вопрос решился.

Индекс убивался конструкцией БД_ТС.Сжать();

Всем спасибо за помощь !

  

hogik

17 — 06.07.18 — 16:29

(15)

«Индекс убивался конструкцией БД_ТС.Сжать();»(с)

А где этот оператор в тексте, который Вы показываете? :-)

«Вопрос решился.»(с)

Не решился. :-)

Вопрос решится после убирания TRIM в индексном выражении.

Т.к. длина ключей в xBase должна быть одинакова для ВСЕХ ключей.

  

hogik

18 — 06.07.18 — 16:38

(16)

«Индекс убивался конструкцией БД_ТС.Сжать();»(с)

А где этот оператор в тексте, который Вы показываете? :-)

«Вопрос решился.»(с)

Не решился. :-)

Вопрос решится после убирания TRIM в индексном выражении.

Т.к. длина ключей в xBase должна быть одинакова для ВСЕХ ключей.

  

hogik

19 — 06.07.18 — 19:38

(16)

Поясню своё предыдущее сообщение в данной теме.

Есть странная ;-) информация, что «FoxPro не поддерживает переменную длину индексного ключа. Если вы попытаетесь построить индекс с ключом, который имеет различные длины, то ключ будет дополнен пробелами.»(с) Например, тут: http://www.foxclub.ru/rhproject/project/html/576a2953-04ff-4a66-9e38-3a3d9c990b72.hhtm

Но, движок из 1С для поддержки DBF не делает этого. Ну, до какой длины надо дополнять пробелы? :-) И возникает ошибка или строится «битый» индекс. Это очень старая ошибка в движке…

  

hogik

20 — 06.07.18 — 21:36

  

Злопчинский

21 — 18.07.18 — 03:26

(16) тебе hogik дал реальную причину сбоя

Но реакции — нету.

Проблема решена?

  

ЧессМастер

22 — 20.07.18 — 11:43

(19) Поясните пожалуйста один момент.

Вы пишите «Если вы попытаетесь построить индекс с ключом, который имеет различные длины, то ключ будет дополнен пробелами»

Смотрим программыный текст создания индекса.

// данные

БД_ТС.поля.Добавить(«ID_Source»,  «S», 50);

// индекс

БД_ТС.индексы.Добавить(«IndSource», «TRIM(ID_Source)»,

Истина);

Что мы имеем в реальности при использовании ДБФ ?

В колонке «ID_Source» в ДБФ у меня хранится ГУИД объекта. У него фиксированная длина у всех объектов.

По этому полю выстроен индекс.

В результате получается

1. Данные — фиксированная строка

2. Индекс строится по фиксированной строке.

Почему в таком случае при конструкции  БД_ТС.Сжать()

происходило падение индекса ?

  

ЧессМастер

23 — 20.07.18 — 11:45

(21) Извиняюсь что долго не отвечал. Сильно был занят, не было времени ответить.

Острота проблемы спала,  теперь можно спокойно подумать в чем была причина.

Я нашел метод устранения ошибки

//Индекс убивался конструкцией БД_ТС.Сжать();

но остались вопросы в причине возникновения

  

hogik

24 — 21.07.18 — 19:08

(22)

Дмитрий.

Сделайте индекс как: «IndSource», «ID_Source»

Обязательно с предварительным удалением CDX файла.

Попробуйте свою обработку. Включая БД_ТС.Сжать().

А потом будем обсуждать «вопросы в причине возникновения»(с).

  

hogik

25 — 22.07.18 — 19:19

(22)

Дмитрий.

Я попытался промоделировать проблему/сбой.

При фиксированной длине значений всех ключей сбоя не происходит.

Мало того. :-) Движок DBF-ов из 1С 8.х нормально отрабатывает индексное выражение с TRIM и разной длиной значений ключей. Устанавливается фиксированная длина ключа в 50 байт — равная длине поля «аргумента» функции TRIM.

Если Вам интересно выяснить причину сбоя, то высылайте мне DBF файл.

Надо его смотреть, а не моё тестовое содержание файла…

  

hogik

26 — 24.07.18 — 00:42

(22)

Дмитрий.

Пока пытался моделировать проблему/сбой обнаружил замечательное явление. :-)

Если индекс имеет признак уникальности и производится запись/обновление строк DBF с повторяющимся значением поля входящего в индексное выражение, то всё может выглядеть нормальным. А иногда возникает ошибка -310 или заваливается вся сессия 1С-а. Реакция движка DBF-а мало предсказуема и зависит от многих факторов — размера поля, количества записей с повторяющимся значением поля, количества записей/обновлений за одно открытие файлов и т.д.

При любом исходе — индекс становится «битым» с массой случайных эффектов.

И вопрос к Вам.

В Ваших алгоритмах обеспечивается уникальное значение поля по которому строится индекс с признаком уникальности?

Тамика

Котовчанин

942 / 482 / 200

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

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

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

1

06.03.2017, 13:32. Показов 4681. Ответов 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

0

09.02.2015 — 11:41


делаю на 8.3.5 (8.3.5.1383) и ниже

xB = новый XBase;
xB.Поля.Добавить(«COST», «N», 14, 2);
xB.СоздатьФайл(«c:test.dbf»);

Ошибка инициализации модуля: ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта
по причине:
{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта( 3)**: Ошибка при вызове метода контекста (СоздатьФайл)

по причине:
Неправильная информация

на 8. 2 работает

кто-нибудь разбирался с такой проблемой?

1

09.02.2015 — 11:46

если у кого работает создание дбф файлов на 8.3 напишите плиз.

2

09.02.2015 — 12:02

(0) Попробуй без структуры создать и с индексом.

xB = новый XBase;
ИмяФайлаБазы = «C:test.dbf»;
ИмяФайлаИндекса = «C:test.cdx»;
xB.СоздатьФайл(ИмяФайлаБазы, ИмяФайлаИндекса);

3

09.02.2015 — 12:12

(0) гы, могу еще предположить )))))
<Имя> (обязательный)
Тип: Строка.
Имя добавляемого поля. Поддерживаются только латинские имена полей длиной до 10 символов.
букофки не мог случаем перепутать?

4

09.02.2015 — 12:29

Хм… Кусочек документации (для клиент-сорверного режима):
Для доступа к файловым ресурсам сервера применяются виртуальные каталоги. Это означает, что в рамках профиля безопасности существует некоторая виртуальная файловая система, в которой создаются каталоги. Каждый виртуальный каталог имеет отражение на реальную файловую систему по определенным правилам. В тот момент, когда прикладному решению необходимо выполнить файловую операцию, в параметре соответствующей функции указывается путь к файлу, расположенному в виртуальной файловой системе. «1С:Предприятие» транслирует виртуальный каталог в реальный и формирует реальный путь к файлу, с которым и выполняется реальная работа. Прикладное решение не может получить информацию о том, в какой физический путь будет отражен виртуальный каталог.

Если в профиле безопасности указаны несколько виртуальных каталогов, то прикладное решение может осуществлять доступ только к этим ресурсам. Попытка доступа к любому другому каталогу (как реальному, так и виртуальному) – невозможна.

5

09.02.2015 — 12:58

Немного еще повангую: обычно серверы ставятся под разными пользователями.
Пользователю, под которым запускается 8.2, разрешено производить чтение. Пользователю сервера 8.3 — нет.

6

09.02.2015 — 13:17

Может, есть смысл попробовать таки РабочийКаталогДанныхПользователя() ?

7

09.02.2015 — 13:33

1це 8.хрень — совместимость вперед/назад разработчиками НЕ ГАРАНТИРОВАНА

8

09.02.2015 — 14:34

(5) нет, файловая, под одним пользователем.

9

09.02.2015 — 14:36

(2) Ошибка инициализации модуля: ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта
по причине:
{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта( 9)**: Ошибка при вызове метода контекста (СоздатьФайл)

по причине:
Не определена структура базы

10

09.02.2015 — 14:38

на сервере и на клиенте не смотрел ?

11

09.02.2015 — 14:38

(3) нет, имя латинское

12

09.02.2015 — 14:39

(10) обычные формы

(6) VZ ВЫИГРЫВАЕТ ВЕЧНУЮ БЛАГОДАРНОСТЬ

13

09.02.2015 — 14:41

+12 вот как так, запускаются же даже с одного ярлыка…

14

09.02.2015 — 14:47

вынужден признать что это я тупой, я сделал поле для выбора файла, и не записывал файл с выбранным путём. то есть 8.2 сохраняет где-то внутри последний выбранный каталог и по умолчанию если не указывать путь пишет туда. 8.3 надо указывать по любому. наверное это хорошо

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

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

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

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

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

  2. Offline

    nomad_irk
    Гуру в 1С

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

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

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

  4. Offline

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.890
    Симпатии:
    1.030
    Баллы:
    204
  5. Так и подумал…всё же спасибо большое!

  6. Offline

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

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

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

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

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

Ponomarenko
09.04.2012 09:01 Прочитано: 4306

Здравствуйте. У нас УПП 8.2 .Программа работает в Демке, ошибок не выдает. Делает все нормально. Запускаю обработку на сервере , на сети, выдает ошибку.
{Обработка.ДозагрузкаНоменклатуры.Форма.Форма.Форма(15)}: Ошибка при вызове метода контекста (СоздатьИндексныйФайл)
ФлИБД = БД.СоздатьИндексныйФайл(«C:index.cdx»);
по причине:
Перед выполнением операции нужно открыть базу

Подскажите где у меня ошибка.

Код 1C v 8.2 УП

 
Процедура ВыполнитьЗапросСервер()
Спр = Справочники.Номенклатура.ВыбратьИерархически();
СпрВидыНоменклатуры=Справочники.ВидыНоменклатуры.Выбрать();
СпрНоменклатурныеГруппы=Справочники.НоменклатурныеГруппы.Выбрать();
БД = Новый XBase;
БД.ОткрытьФайл("C:Nomenk.DBF");
БД.Индексы.Добавить("IDXCODE", "KOD");
ФлИБД = БД.СоздатьИндексныйФайл("C:index.cdx");
БД.ТекущийИндекс = БД.Индексы.IDXCODE;
БД.Первая();
//БД.Перейти(17166);
Пока БД.Следующая() Цикл
//сообщить("текущая "+БД.KOD);

// РезультатПоиска.НаименованиеПолное=БД.POLN_NAME;
// //*************************
//РезультатПоиска.Записать();
//************************************
РезультатПоиска1 = Справочники.НоменклатурныеГруппы.НайтиПоКоду(БД.ZAKAZ);
Если РезультатПоиска1.Пустая() Тогда
// Выполнить действия, предусмотренные в случае, когда элемент не найден.
//сообщить("не нашла "+БД.KOD);
иначе
//сообщить(РезультатПоиска1);
Если РезультатПоиска1.ЭтоГруппа<>Истина Тогда
элементОбъект1 = РезультатПоиска1.ПолучитьОбъект();
КонецЕсли;
КонецЕсли;
//************************************
РезультатПоиска2 = Справочники.ВидыНоменклатуры.НайтиПоНаименованию(БД.VID_NOMEKL);
Если РезультатПоиска2.Пустая() Тогда
// Выполнить действия, предусмотренные в случае, когда элемент не найден.
//сообщить("не нашла "+БД.KOD);
иначе
Если РезультатПоиска2.ЭтоГруппа<>Истина Тогда
элементОбъект2 = РезультатПоиска2.ПолучитьОбъект();
КонецЕсли;
КонецЕсли;
//************************************
РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду(БД.KOD);
Если РезультатПоиска.Пустая() Тогда
// Выполнить действия, предусмотренные в случае, когда элемент не найден.
сообщить("не нашла "+БД.KOD);
иначе
Если РезультатПоиска.ЭтоГруппа<>Истина Тогда
элементОбъект = РезультатПоиска.ПолучитьОбъект();
элементОбъект.НаименованиеПолное=БД.POLN_NAME;

элементОбъект.НоменклатурнаяГруппа=РезультатПоиска1;

элементОбъект.ВидНоменклатуры=РезультатПоиска2;
сообщить(БД.KOD+" элементОбъект= "+элементОбъект+" элементОбъект1= "+РезультатПоиска1+" элементОбъект2= "+РезультатПоиска2 );

элементОбъект.Записать();

КонецЕсли;
КонецЕсли;

КонецЦикла;
БД.ЗакрытьФайл();

КонецПроцедуры

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
09.04.2012 10:55 Ответ № 1

Вот рабочий код:
Код 1C v 8.х

 // Перекачка справочника "Подразделение" в DBF-файле

ФайлБД=КаталогИмя+"Spr_podr."; // Название файла без расширения
xБД=Новый Файл(ФайлБД+"dbf"); // Создание объекта файла в среде 1С

// Удалить, если файлы уже есть (в том числе и индексный файл)
Если xБД.Существует() Тогда
УдалитьФайлы(ФайлБД,"*");
КонецЕсли;

// Создание файлов
xБД = Новый XBase; // создание объекта файла формата xBase
// добавим поля
xБД.Поля.Добавить("Id", "S", 5);
xБД.Поля.Добавить("Name", "S", 25);
xБД.СоздатьФайл(ФайлБД+"dbf"); // создадим реальный файл из объекта
// Индексное выражение
ИндВр="Id";
xБД.индексы.Добавить("Id",ИндВр,Истина);
ИБД = xБД.СоздатьИндексныйФайл(ФайлБД+"cdx"); // создание индексного файла
xБД.АвтоСохранение=Истина;
xБД.ЗакрытьФайл();

// Выкачка данных
xБД.ОткрытьФайл(ФайлБД+"dbf",ФайлБД+"cdx");
xБД.ТекущийИндекс = xБД.индексы.Id;
Выборка=Справочники.Подразделения.Выбрать();
Пока Выборка.Следующий() Цикл
xБД.Добавить();
xБД.ID=Выборка.Код;
xБД.Name=Выборка.Наименование;
xБД.Записать();
КонецЦикла;
xБД.ЗакрытьФайл();

// проверка работы индекса
xБД.ОткрытьФайл(ФайлБД+"dbf",ФайлБД+"cdx");
xБД.ТекущийИндекс = xБД.индексы.Id;
Если xБД.Найти("00003",">=") Тогда
Сообщить(xБД.ID+" - "+xБД.NAME);
Пока xБД.Следующая() Цикл
Сообщить(xБД.ID+" - "+xБД.NAME);
КонецЦикла;
КонецЕсли;
xБД.ЗакрытьФайл();

Подсказка: Для быстрого перемещения к последнему ответу или к вопросу используйте или .

Ошибка подключения внешних метаданных по причине: Файл не обнаружен. При расшифровке внешнего отчета

Описание ошибки:
Ошибка возникает при попытке использования штатного механизма расшифровки для внешних отчетов, подключенных в базе типовой конфигурации 1С: Управление торговлей 8, ред. 10.3 в справочник «Внешние отчеты и обработки».

Найденные решения:

Ошибка при вызове метода контекста (Создать) 
            НовыйОтчет = ВнешниеОтчеты.Создать(ОтчетОбъект.ИспользуемоеИмяФайла); 
по причине: 
Ошибка подключения внешних метаданных 
по причине: 
Файл не обнаружен ‘C:Users<имя_пользователя>AppDataLocalTempv8_F572_57.tmp’

При открытии файла внешнего отчета отдельно через меню «Файл» — «Открыть» и попытке расшифровки — работа механизма расшифровки не нарушается возникновением какой-либо похожей ошибки.

Обращение за помощью к мировой паутине дало прямую подсказку в виде конкретных ответов на поисковый запрос:

Ошибка подключения внешних метаданных по причине: Файл не обнаружен

Через нее был совершен переход в другое обсуждение по теме форума forum.mista.ru:

v8: Расшифровка во внешнем отчете

Получается, что при попытке расшифровки в отчете, который хранится в справочнике «Вешние отчеты и обработки», в коде происходит удаление временного файла-обработки прежде, чем закончится выполнение кода, отвечающего за расшифровку отчета.

Как не печально, но приходится констатировать тот факт, что для типовых решений придется их поставить на частичную поддержку, чтобы закомментировать участок кода, который отвечает за преждевременное удаление файла внешней обработки.

Для конфигурации 1С: Управление торговлей 8, ред. 10.3 пример такого места в коде — это модуль «Формы списка» справочника «ВнешниеОбработки», процедура «СправочникСписокВыбор», комментируем исполняемую строку кода:

УдалитьФайлы(ИмяФайла);

Нажатие на изображении увеличит его
1C 8 ошибка при попытке получить расшифровку отчета справочника внешних отчетов

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

14-06-2019

Журавлев А.С.
(Сайт azhur-c.ru)

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

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

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

Есть файл соответствия .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]

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

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

Тэги:

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

XBase.КодОшибки (XBase.ErrorCode)

Синтаксис:

КодОшибки()

Возвращаемое значение:

Тип: Число.
Код последней ошибки.
Возвращаемые коды ошибок:

  • -10 — Ошибка закрытия файла;
  • -20 — Ошибка создания файла;
  • -30 — Ошибка определения длины файла;
  • -40 — Ошибка установки длины файла;
  • -50 — Ошибка при попытке заблокировать файл;
  • -60 — Ошибка при открытии файла;
  • -70 — Ошибка чтения файла;
  • -80 — Ошибка удаления файла;
  • -90 — Ошибка переименования файла;
  • -100 — Ошибка позиционирования в файле;
  • -110 — Ошибка снятия блокировки с файла;
  • -120 — Ошибка записи в файл;
  • -200 — Файл не является базой данных DBF-формата;
  • -210 — Неопознанное имя поля;
  • -220 — Неопознанный тип поля;
  • -230 — Запись слишком длинная;
  • -300 — Индексный файл не содержит информации о записи;
  • -310 — Нарушение структуры индексного файла;
  • -330 — Указанное имя индекса недоступно;
  • -340 — Ошибка уникальности индекса;
  • -400 — Ожидается запятая или скобка;
  • -410 — Выражение не завершено;
  • -422 — IIF() требует параметров одинаковой длины;
  • -425 — У STR() и SUBSTR() 2-й и 3-й параметры — константы;
  • -430 — Неверное число параметров;
  • -440 — Слишком сложное выражение;
  • -450 — Пропущена правая скобка;
  • -460 — Неверный тип подвыражения;
  • -470 — Неопознанная функция;
  • -480 — Неопознанный оператор;
  • -490 — Неопознанное значение;
  • -500 — Выражение не завершено символом двойной кавычки;
  • -920 — Недостаточно памяти.

Описание:

Получает код завершения последней выполненной операции.

Доступность:

Тонкий клиент, сервер, толстый клиент, внешнее соединение.

Пример:

Если xB.КодОшибки() = 60 Тогда
    Сообщить(«Не удалось открыть файл DBF!»);
КонецЕсли
;


  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

Понравилась статья? Поделить с друзьями:
  • Ошибка создания файла ultraiso
  • Ошибка создания файла hiwatch
  • Ошибка создания файла hikvision
  • Ошибка создания трансляции ошибка youtube api
  • Ошибка создания трансляции youtube api obs