Имя: Пароль:
1C
 
Помогите, пожалуйста, с созданием файла DBF!
0 НевестаПрограмМИСТА
 
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)}: Ошибка при вызове метода контекста (Добавить)
   ДБФ.Добавить();
по причине:
Перед выполнением операции нужно открыть базу

Я так понимаю, что не открывает, потому что не создает. Смотрю в обработчике при методах СоздатьФайл(), ОткрытьФайл() и Добавить() пишет: Обращение к процедуре к процедуре объекта как к функции.
Находила на форумах подобные ошибки, но так и не разобралась.
Помогите, пожалуйста. Заранее всем спасибо.
1 Ajbolitov
 
18.10.10
10:15
попробуй убрать строчку
ДБФ.ОткрытьФайл(ИмяФайлаБазы);
2 НевестаПрограмМИСТА
 
18.10.10
10:18
Убрала. Ничего не изменилось (((
3 dragonIMV
 
18.10.10
10:22
ФайлБТ.ОткрытьФайл("X:\CASHLOAD\PluCash1.dbf");
       Если Не ФайлБТ.Открыта() Тогда
           ФайлБТ.СоздатьФайл("X:\CASHLOAD\PluCash1.dbf");
       Иначе
           //ФайлБТ.ОчиститьФайл();
       КонецЕсли;

это кусок из обработки выгрузки на кассу...под рукой вот была...

далее, кодировку указывал я после открытия/создания файла, и работает нормально это...да и автосохранение убрать после открытия надо
4 dragonIMV
 
18.10.10
10:23
далее, имя файла не более 8 символов!!!!! для dbf
и все на латинице...кирилицу нельзя использовать
5 НевестаПрограмМИСТА
 
18.10.10
10:23
(3) Спасибо. Сейчас попробую
6 dragonIMV
 
18.10.10
10:25
еще вопрос, выполняется на клиенте или на сервере?
сервер когда выполняет может не видеть доступ через сеть, есть там проблемы разные с этим...

да и клиент не всегда видит доступ, попробую пока название файла локальное, на том же компе, где идет работа с 1Ской
7 НевестаПрограмМИСТА
 
18.10.10
10:30
(6) пока всё на клиенте.
Попробовала (3) тоже самое:
{Форма.Форма.Форма(40)}: Ошибка при вызове метода контекста (Добавить)
   ДБФ.Добавить();
по причине:
Перед выполнением операции нужно открыть базу
Для (4) там ровно 8 символов: латинская "b"  и ещё 7 цифр
8 dragonIMV
 
18.10.10
10:32
(7) в чем работаете вообще? что за платформа и конфигурация?
9 НевестаПрограмМИСТА
 
18.10.10
10:36
(8) Комплексная автоматизация (редакция 1.1)
10 dragonIMV
 
18.10.10
10:38
файл уже есть хоть какой то? проверьте в месте выгрузки, есть ли файл уже созданный с таким названием
11 dragonIMV
 
18.10.10
10:39
бывает ошибка такая, если файл есть созданный, но как то неправильно заполненный...либо файл dbf в этот момент открыт кем то (например в Excel)...
12 НевестаПрограмМИСТА
 
18.10.10
10:43
(10-11) дело в том, что файла созданного как раз и нет. Пробовала даже так: не создавала файл программно, а пыталась открыть уже готовый файл, не открывает, выдает ту же ошибку
13 Salvador Limones
 
18.10.10
10:44
(12) Путь менять пробовала, на локальный. Может с шарой проблемы?
14 dragonIMV
 
18.10.10
10:44
ошибка идет на "ДБФ.ОткрытьФайл(ИмяФайлаБазы);" ? (если смотреть пошагово)
15 НевестаПрограмМИСТА
 
18.10.10
10:46
(14) нет, на ДБФ.Добавить()
Ругается, что база не открыта
16 НевестаПрограмМИСТА
 
18.10.10
10:48
+ (15) {Форма.Форма.Форма(41)}: Ошибка при вызове метода контекста (Добавить)
   ДБФ.Добавить();
по причине:
Перед выполнением операции нужно открыть базу
17 dragonIMV
 
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-я строка

   ДБФ.Добавить();
.......
ДБФ.Записать();
ДБФ.ЗакрытьФайл()
18 dragonIMV
 
18.10.10
10:51
стоп...
первая строка не ДБФ = Новый XBase();
а ДБФ = Новый XBase;

у меня без скобок работает все
19 НевестаПрограмМИСТА
 
18.10.10
10:51
(17) сейчас попробую
20 НевестаПрограмМИСТА
 
18.10.10
10:52
(18) ок
21 dragonIMV
 
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
Ура!!! Создался! ))) Но почему-то не заполнился... может я его не через то, что надо смотрю... Через дэжавю можно смотреть?
23 dragonIMV
 
18.10.10
11:02
ФайлБТ.Добавить();

.....
ФайлБТ.Записать();

это надо в цикле делать, при каждой новой строке...

т.е. записывать файл после добавление каждой строки
24 dragonIMV
 
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
огромное спасибо за помощь! У меня всё получилось )))