Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Пустая строка в файле DBF при работе с XBase

v7: Пустая строка в файле DBF при работе с XBase
Я
   Dizi
 
06.09.18 - 11:02
Здравствуйте!
Данная тема уже поднималась на форуме, но никак не могу применить решения для своего случая.
В какой-то момент появляется пустая запись в DBF, после которой туда вообще ничего не пишется.
Перед Записать() в отладке в Xb все поля заполнены, а в файле появляется пустая строка.
ID не повторяется с предыдущими значениями.
Для каждой новой записи выполняется следующий код (переименовала переменные и убрала пару заполненных полей структуры, по отладке для каждой новой записи попадаю в Xb.Добавить()):
    Xb = СоздатьОбъект("XBase"); 
    Xb.ОткрытьФайл(Путь + "File.cdx", Ложь); 
    NAME = Данные.NAME; 
    ID = Данные.ID; 
    
    Xb.ТекущийИндекс("IDXID");      
    Xb.Ключ.ID = ID;
    Если ЗначениеЗаполнено(Данные.NOM) = 1 Тогда
        Если Xb.НайтиПоКлючу(0) = 0 Тогда
            Xb.Добавить();
            Xb.ID = ID;
            Xb.NAME = NAME;
        КонецЕсли;
        Xb.IDPOSTNOM = Строка(Данные.NOM);
    Иначе
        Если Xb.НайтиПоКлючу(0) = 1 Тогда
            Xb.Удалить();
        КонецЕсли;
        Xb.Сжать();
    КонецЕсли;
    Xb.Записать();   
    Xb.ЗакрытьФайл();
 
 
   Сияющий в темноте
 
1 - 06.09.18 - 11:20
cdx это же индекс
что мы вообще открываем?
   Dizi
 
2 - 06.09.18 - 11:24
там .dbf, это я пример переименовывала, чтобы не рабочий код вытаскивать, случайно поставила.
Я вычислила опытным путем, что дело в повторяющемся Xb.IDPOSTNOM, но он может быть повторяющимся. Не повторяется только ID
   hhhh
 
3 - 06.09.18 - 11:35
(2) давайте текущий пример. Наверняка вы там еще в семи-восьми местах чего нибудь напахали при переименовании.
   Dizi
 
4 - 06.09.18 - 11:37
При создании файла есть индекс
БД.ДобавитьИндекс("IDXIDPOSTNOM", "IDPOSTNOM", 1, 0, ""); 
Он всё ломает, не дает добавить строку с таким же IDPOSTNOM.
Но я думала, что ТекущийИндекс("IDXID"); дает возможность работать при добавлении только по нему
   1Сергей
 
5 - 06.09.18 - 11:39
(4) неа
   Dizi
 
6 - 06.09.18 - 11:44
помогло проставление уникальности в 0 при создании индекса
БД.ДобавитьИндекс("IDXIDPOSTNOM", "IDPOSTNOM", 0, 0, "");
   Dizi
 
7 - 06.09.18 - 11:51
Извиняюсь за такое оформление текста, пока не поняла, как здесь форматировать.
Резюмирую:
Индекс при создании файла был создан ошибочно уникальным.

Не смотря на то, что перед построчной записью обозначался другой индекс, другой индекс не давал внести запись.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует