Имя: Пароль:
1C
1С v8
v8: Выгрузка из 1С 8.2 УТ11 в DBF - выгружается только последняя запись
0 Азат
 
19.01.12
07:19
Собственно, суть: делаю выгрузку документа из 1С 8.2 в ДБФ. Использую штатный объект ХВаse, код такой:

База = Новый XBase;
База.поля.Добавить(КодНом, "S", 20);
База.Кодировка = КодировкаXBase.OEM;
База.СоздатьФайл("C:\123.dbf");
База.АвтоСохранение = Истина;
Для Каждого Стр Из ТЗ Цикл
   База.Добавить();
   Выполнить("База." + КодНом + "= Стр[КодНом]");
   //База.Записать();
КонецЦикла;
//База.Записать();
База.ЗакрытьФайл();

Получается оч странно - через раз примерно сохраняет только последнюю запись в файл и все... Если отладчиком шагать, то всегда все норм.

Пробовал убирать автосохранение и добавлять Записать после каждого добавления записи - не помогло.

Как можно исправить данную ситуацию?

ЗЫ. Релиз платформы 8.2.14.540
1 Wobland
 
19.01.12
07:40
что за Выполнить()? явно лишнее
2 Азат
 
19.01.12
07:41
(1) ну будет там База[КодНом]= Стр[КодНом];
3 Wobland
 
19.01.12
07:42
(2) База.КодНом
4 Wobland
 
19.01.12
07:45
И Поля.Добавить("КодНом"...)
5 Wobland
 
19.01.12
07:45
(4) всё, понял
6 Азат
 
19.01.12
07:50
(5) молодец, TupakModa = off
7 Азат
 
19.01.12
08:03
ап ап ап
8 Азат
 
19.01.12
08:16
подождем крутых москалей...
9 Азат
 
19.01.12
08:46
fg
10 ilpar
 
19.01.12
08:53
?

База.Записать();
База.ЗакрытьФайл();
11 ilpar
 
19.01.12
08:55
Ну и автосохранение попытайся вырубить
12 ilpar
 
19.01.12
08:55
в смысле не инициализировать
13 Азат
 
19.01.12
09:02
(11) см (0) - уже пробовал отключать автосохранение, ничего не поменялось
14 ilpar
 
19.01.12
09:07
у меня так, все работало.

еще такой фрагмент там есть

//База.АвтоСохранение = Истина;
База.Записать();
...
База.Записать();
База.ЗакрытьФайл();
15 ilpar
 
19.01.12
09:09
хотя... пофиг, от своих слов откажусь ка - не помню.

Но методом перебора у тя за 15 минут получится. Всего 6 вариантов
16 Азат
 
19.01.12
09:10
(15) уже 2 дня сношаемся - нереальный бубен получается - иной раз нажимаешь 2-3 раза подряд "Выгрузить" - уходит, иной раз - с первого
17 ilpar
 
19.01.12
09:20
то, что у тебя записано должно работать
у меня.

...
//База.АвтоСохранение = Истина;
...
Пока Выборка.Следующий() Цикл
    ...
    База.Записать();
КонецЦикла;

База.ЗакрытьФайл();
18 ilpar
 
19.01.12
09:23
Автосохранение, написано что записывается в файл, при очередном добавить()
Поэтому у тебя возможно выпадала последняя строчка
19 Азат
 
19.01.12
09:28
(18) блеааааааааать, какие вы все умные, все-таки... я же написал, что наоборот попадает только последняя строка, а не выпадает последняя
20 ilpar
 
19.01.12
09:29
у меня все заработало, не так в твоем королекстве
21 ilpar
 
19.01.12
09:29
блеать
22 ilpar
 
19.01.12
09:36
последний мой код рабочий.
8.2.14.533
Вообще надо суметь 2 дня с перебором 10 вариаций проплюхаться
23 Азат
 
19.01.12
09:59
ап
24 ilpar
 
19.01.12
10:02
мне смешно :)
я сказал что код проверил - файл сформировался нормально.
25 hhhh
 
19.01.12
10:08
(23) а по-человечески если написать

База[КодНом]= Стр[КодНом];

тоже не получается? Или так

ЗаполнитьЗначенияСвойств(База, Стр);
26 Азат
 
19.01.12
10:09
(24) рад за тебя... могу еще раз повторить для "не таких как все" - выполнил 800 выгрузок, 350 нормальных, 450 - по 1 к

(25) не влияет, количество записей в базе не изменяется
27 ilpar
 
19.01.12
10:15
делать постановки нормальные надо, тогда помогут

(26) уже что-то
28 ilpar
 
19.01.12
10:16
удаляй файл после каждой выгрузки руками.
Напиши результат
29 ilpar
 
19.01.12
10:18
при этом выгружая
и код проверочный минималистический
База.КодНом="D";
30 ilpar
 
19.01.12
10:20
также по чьему коду идет проверка
По твоему или моему
31 ilpar
 
19.01.12
10:23
и вообще, что мешает после каждого витка цикла смотреть, что в файл попало ?
32 Азат
 
19.01.12
10:32
тему закрываю, питрасянов впень! адо рулит
33 ilpar
 
19.01.12
10:36
петросян то ты, нехрен на диск с писать . Возможно что-то с правами.

Сделал тестовый пример, первый раз пишет нормально на В7
34 ilpar
 
19.01.12
10:37
второй раз не дает, другое название- первый раз дает записать.

Если бы выполнил мои последние инструкции, локализовал бы проблему быстрее
35 ilpar
 
19.01.12
10:38
и вообще нельзя ДБФ файлы так делать
База.поля.Добавить(КодНом, "S", 20);
надо
База.поля.Добавить(KodNom, "S", 20);
36 ilpar
 
19.01.12
10:41
тестовый пример на диск D - все идеально в управляемых формах
37 ilpar
 
19.01.12
10:42
&НаКлиенте
Процедура Сформировать(Команда)
   СформироватьНаСервере()
КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере()

   База = Новый XBase;
   База.поля.Добавить("Nom", "S", 20);
   База.Кодировка = КодировкаXBase.OEM;
   База.СоздатьФайл("D:\1234.dbf");
   //База.АвтоСохранение = Истина;
   Для Стр=1 По 15 Цикл
       База.Добавить();
       База.Nom = "D";
       База.Записать();
   
   КонецЦикла;
   //База.Записать();
   
   База.ЗакрытьФайл();

КонецПроцедуры // СформироватьНаСервере()