Имя: Пароль:
1C
1С v8
СоздатьИндексныйФайл Неправильная информация
0 fdv_83
 
07.09.17
20:01
Здравствуйте. Необходимо при помощи обработки создать dbf файл с одной индексированной колонкой для дальнейшего поиска информации по ней. Но в методе СоздатьИндексныйФайл выдается ошибка "Неправильная информация". Подскажите, пожалуйста, как можно решить эту проблему. Прилагаю код:

    ПутьКФайлу = "D:\Kontr_1C.dbf";
    ПутьКИндексу = "D:\Kontr_1C.cdx";
    Файл = Новый Файл(ПутьКФайлу);
    Если Не Файл.Существует() Тогда
        ФайлDBFСинхронизацияКонтрагентов = Новый XBase();
        ФайлDBFСинхронизацияКонтрагентов.АвтоСохранение = Истина;
        ФайлDBFСинхронизацияКонтрагентов.Поля.Добавить("Code","S",254);
        ФайлDBFСинхронизацияКонтрагентов.Поля.Добавить("Name","S",254);
        ФайлDBFСинхронизацияКонтрагентов.Поля.Добавить("UID_1C","S",254);
        ФайлDBFСинхронизацияКонтрагентов.Поля.Добавить("Name_1C","S",254);
        ФайлDBFСинхронизацияКонтрагентов.СоздатьФайл(ПутьКФайлу,ПутьКИндексу);
        ФайлDBFСинхронизацияКонтрагентов.Индексы.Добавить("IdxCode","Code",Истина);
        ФайлИндекс = ФайлDBFСинхронизацияКонтрагентов.СоздатьИндексныйФайл(ПутьКИндексу);
    Иначе
        ФайлDBFСинхронизацияКонтрагентов = Новый XBase(ПутьКФайлу,ПутьКИндексу,Ложь);
    КонецЕсли;
1 Остап Сулейманович
 
07.09.17
20:14
(0) В моем СП прописана такая последовательность :

xB = Новый xBase;
xB.Поля.Добавить("CODE", "S", 5);
xB.Поля.Добавить("NAME", "S", 40);

// Добавим индекс по полю CODE:
xB.Индексы.Добавить("IDXCODE","CODE", Истина);
xB.СоздатьФайл("c:\test.dbf", "c:\test.cdx");

т. е. сначала "Индексы.Добавить" и только потом "СоздатьФайл"
2 kosts
 
07.09.17
20:45
Проверь, возможно СоздатьИндексныйФайл() не нужен в данном случае.
Т.к. путь к индексу уже задается в СоздатьФайл(ПутьКФайлу,ПутьКИндексу)
3 fdv_83
 
08.09.17
01:46
(1) (2) Написал так

    ПутьКФайлу = "D:\Kontr_1C.dbf";
    ПутьКИндексу = "D:\Kontr_1C.cdx";
    Файл = Новый Файл(ПутьКФайлу);
    Если Не Файл.Существует() Тогда
        ФайлDBFСинхронизацияКонтрагентов = Новый XBase();
        ФайлDBFСинхронизацияКонтрагентов.АвтоСохранение = Истина;
        ФайлDBFСинхронизацияКонтрагентов.Поля.Добавить("Code","S",254);
        ФайлDBFСинхронизацияКонтрагентов.Поля.Добавить("Name","S",254);
        ФайлDBFСинхронизацияКонтрагентов.Поля.Добавить("UID_1C","S",254);
        ФайлDBFСинхронизацияКонтрагентов.Поля.Добавить("Name_1C","S",254);
        ФайлDBFСинхронизацияКонтрагентов.Индексы.Добавить("IdxCode","Code",Истина);
        ФайлDBFСинхронизацияКонтрагентов.СоздатьФайл(ПутьКФайлу,ПутьКИндексу);
        //ФайлИндекс = ФайлDBFСинхронизацияКонтрагентов.СоздатьИндексныйФайл(ПутьКИндексу);
    Иначе
        ФайлDBFСинхронизацияКонтрагентов = Новый XBase(ПутьКФайлу,ПутьКИндексу,Ложь);
    КонецЕсли;

То же самое пишет (неправильная информация) на строчке
ФайлDBFСинхронизацияКонтрагентов.СоздатьФайл(ПутьКФайлу,ПутьКИндексу);

Такое впечатление, что я как-будто нарушаю правила создания dbf файла, но не могу понять, что именно не так я делаю.
4 fdv_83
 
08.09.17
01:59
Всем спасибо проблема решена. Дело было в недопустимой длине создаваемых полей (254), сделал 150, всё сработало
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший