Имя: Пароль:
1C
1С v8
XBase не все строки не записывает.
,
0 ГдеСобака Зарыта
 
25.02.13
15:30
Делаю выгрузку в ДБФ. Код такой. Многоточием пропущены не относящиеся к делу участки кода
ДБ = Новый XBase;
ДБ.поля.Добавить("Vid",    "N", 1, 0);
ДБ.поля.Добавить("NomDoc",    "S", 15, 0);
ДБ.поля.Добавить("DatDoc",    "D", 10, 0);
...
   
ДБ.СоздатьФайл(Файл.ПолноеИмя);
ДБ.АвтоСохранение = Истина;
Для Каждого СтрТабДок Из ЭтотОбъект.ТабДок Цикл
   ...
   ТаблицаТовары    = Док.Продажи.Выгрузить();
   Для Каждого СтрТоваров Из ТаблицаТовары Цикл
       ДБ.Добавить();
       ДБ.Vid      = Vid;
       ДБ.NomDoc   = NomDoc;
       ДБ.DatDoc   = DatDoc;
       ДБ.Sum      = СтрТоваров.Сумма;
       ...    
   КонецЦикла;
   ДБ.Записать();
КонецЦикла;
ДБ.Записать();
ДБ.ЗакрытьФайл();

Не записывается последняя строка Табличной части некоторых документов. Из 100 доков ~ в 15 не будет будет хватать посл. строки в ДБФ-файле. Причем это все рандомно. Если убрать первый ДБ.Записать(); то вообще почти все доки будут выгружены без последней строки
ЧЯДНТ?
1 1Сергей
 
25.02.13
15:32
//ДБ.АвтоСохранение = Истина;
2 NS
 
25.02.13
15:32
Сделай ДБ.Записать(); после добавления каждой записи.
3 NS
 
25.02.13
15:35
А как ты узнал что нет последней строчки? Каким кодом?
ИМХО ошибка у тебя не в записи, а в чтении.
4 pumbaEO
 
25.02.13
15:45
Межу этими строками

Для Каждого СтрТабДок Из ЭтотОбъект.ТабДок Цикл
   ...
   ТаблицаТовары    = Док.Продажи.Выгрузить();

Есть Продолжить
5 ГдеСобака Зарыта
 
25.02.13
15:57
(3) Визуально проверял). Ну и кодом тоже. Счетчик сравнивал в ДБ.КоличествоЗаписей().
(4) Продолжить; нет
6 ГдеСобака Зарыта
 
25.02.13
16:00
(1) Так ваще по одной строке на документ
7 NS
 
25.02.13
16:01
(6) ДБ.Записать() перед первым Конеццикла добавь.
8 ГдеСобака Зарыта
 
25.02.13
16:06
(2), (7) Так уже лучше. Все записи кроме первой. Что с первой не так?
9 NS
 
25.02.13
16:07
(8) Чем смотришь? Как узнал что первой нет?
10 Oleg_Kag
 
25.02.13
16:07
мням... массив строк начинается с нуля... там ни где нету индексов?
11 Mafoni
 
25.02.13
16:14
ИМХО - добавь в этот кусок
Для Каждого СтрТоваров Из ТаблицаТовары Цикл
       ДБ.Добавить();
       ДБ.Vid      = Vid;
       .....
       Сообщить(СтрТоваров.Номенклатура);
КонецЦикла;

таким образом ты увидиш те у тя проблема при выборке данных или при запихивании в DBF
и еще момент - если я пишу - ДБ.АвтоСохранение = Истина;  
то
ДБ.Записать(); делаю один раз в конце процедуры
12 ГдеСобака Зарыта
 
25.02.13
16:14
А нет, все норм. Проверял ДБ.КоличествоЗаписей() почему то сообщает на единицу меньше. А записи все в файле присутствуют.
А это нормально на каждую запись делать ДБ.Записать()?
В клюшках вроде одного раза хватало в конце формирования файла
13 Mafoni
 
25.02.13
16:14
(8) а вообще покажи полный код - думаю проблема де то там
14 Mafoni
 
25.02.13
16:15
(12) - смотри (11)
15 ГдеСобака Зарыта
 
25.02.13
16:15
+12 и это с ДБ.АвтоСохранение = Истина;
16 ГдеСобака Зарыта
 
25.02.13
16:21
А если ДБ.АвтоСохранение = Истина; убрать, то 0 записей в файле
17 Mafoni
 
25.02.13
16:31
(16) если убрать  ДБ.АвтоСохранение = Истина; то после каждого
ДБ.Добавить(); необходимо сделать ДБ.Записать();
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн