Имя: Пароль:
1C
1С v8
Выгрузка в dbf
0 shock3r
 
22.01.13
11:33
Подскажите по выгрузке в dbf файл:
1 shock3r
 
22.01.13
11:34
ДБФ = Новый XBase;

   ДБФ.Поля.Добавить("CODE","S",11);    // Код - тип СТРОКА
   ДБФ.Поля.Добавить("NAME","S",100);   // Наименование - тип СТРОКА
   //ДБФ.Поля.Добавить("SERVICE","L",1);  // Услуга - тип Булево
   //ДБФ.Поля.Добавить("PRICE","N",15,2); // Цена - тип Число(длина 15, точность 2)

   ДБФ.СоздатьФайл("C:\obmen.dbf");
   Выборка = Справочники.Номенклатура.Выбрать();
   Пока Выборка.Следующий() Цикл
       ДБФ.Добавить();
       ДБФ.CODE    = Выборка.Код;
       ДБФ.NAME    = Выборка.Наименование;
       //ДБФ.SERVICE    = Выборка.Услуга;
       //ДБФ.PRICE    = Выборка.Цена;
       ДБФ.Записать();
   КонецЦикла;
   ДБФ.ЗакрытьФайл();

Как сделать обработку - проверку, если файл открыт другим приложением - чтобы выводилось сообщение, что файл занят?
2 cw014
 
22.01.13
11:35
Попытка
  ДБФ.СоздатьФайл("C:\obmen.dbf");
Исключение
  Сообщить("Файл открыт в другой программе");
  Возврат;
КонецПопытки;
3 shock3r
 
22.01.13
11:36
(2) спасибо, то что нужно
4 shock3r
 
22.01.13
11:41
(2) что-то криво, не хочет он на исключение прыгать
5 Kreont
 
22.01.13
11:48
XBase (XBase)
Открыта (IsOpen)
Синтаксис:

Открыта()
Возвращаемое значение:

Тип: Булево.
Истина - файл открыт; Ложь - файл не открыт.
6 shock3r
 
22.01.13
11:50
(5) Вообщем вот рабочий вариант, может кому-то будет полезен.

   ДБФ = Новый XBase;
   
   Попытка
       ДБФ.СоздатьФайл("C:\obmen.dbf");
   Исключение
       Сообщить("Файл открыт в другой программе");
       Возврат;
   Возврат;
   КонецПопытки;
   ДБФ.Кодировка = КодировкаXBase.OEM;
   ДБФ.Поля.Добавить("CODE","S",11);    // Код - тип СТРОКА
   ДБФ.Поля.Добавить("NAME","S",100);   // Наименование - тип СТРОКА
   //ДБФ.Поля.Добавить("SERVICE","L",1);  // Услуга - тип Булево
   //ДБФ.Поля.Добавить("PRICE","N",15,2); // Цена - тип Число(длина 15, точность 2)
   //ДБФ.СоздатьФайл("C:\obmen.dbf");
   
   Выборка = Справочники.Номенклатура.Выбрать();
   Пока Выборка.Следующий() Цикл
       ДБФ.Добавить();
       ДБФ.CODE    = Выборка.Код;
       ДБФ.NAME    = Выборка.Наименование;
       //ДБФ.SERVICE    = Выборка.Услуга;
       //ДБФ.PRICE    = Выборка.Цена;
       ДБФ.Записать();
   КонецЦикла;
   ДБФ.ЗакрытьФайл();
7 Дядя Вова
 
22.01.13
11:53
(6) Сказали же в (5):
Если ДБФ.Открыта() Тогда
Сообщить("Файл открыт в другой программе");
Возврат;
Иначе
ДБФ.СоздатьФайл("C:\obmen.dbf");
8 cw014
 
22.01.13
11:56
(7) Эээээ, это как? Создается экземпляр объекта XBase и вдруг он сразу становится открытым в другой программе?
9 shock3r
 
22.01.13
11:59
(7) Я затупил
10 shock3r
 
22.01.13
11:59
(7) ДБФ = Новый XBase;
   
   ДБФ.Кодировка = КодировкаXBase.OEM; //dos кодировка
   ДБФ.Поля.Добавить("CODE","S",11);    // Код - тип СТРОКА
   ДБФ.Поля.Добавить("NAME","S",100);   // Наименование - тип СТРОКА
   
   ДБФ.СоздатьФайл("C:\obmen.dbf");
   Если НЕ ДБФ.Открыта() Тогда
       Сообщить("Файл открыт в другой программе", СтатусСообщения.Важное);
       Возврат;
   КонецЕсли;
   
   //Попытка
   //    ДБФ.СоздатьФайл("C:\obmen.dbf");
   //Исключение
   //    Сообщить("Файл открыт в другой программе");
   //    Возврат;
   //Возврат;
   //КонецПопытки;
   ////////////////////ДБФ.Кодировка = КодировкаXBase.OEM; //dos кодировка
   ////////////////////ДБФ.Поля.Добавить("CODE","S",11);    // Код - тип СТРОКА
   ////////////////////ДБФ.Поля.Добавить("NAME","S",100);   // Наименование - тип СТРОКА
   //ДБФ.Поля.Добавить("SERVICE","L",1);  // Услуга - тип Булево
   //ДБФ.Поля.Добавить("PRICE","N",15,2); // Цена - тип Число(длина 15, точность 2)
   //ДБФ.СоздатьФайл("C:\obmen.dbf");
   
   Выборка = Справочники.Номенклатура.Выбрать();
   Пока Выборка.Следующий() Цикл
       ДБФ.Добавить();
       ДБФ.CODE    = Выборка.Код;
       ДБФ.NAME    = Выборка.Наименование;
       //ДБФ.SERVICE    = Выборка.Услуга;
       //ДБФ.PRICE    = Выборка.Цена;
       ДБФ.Записать();
   КонецЦикла;
   ДБФ.ЗакрытьФайл();
11 Reset
 
22.01.13
12:17
Может, все таки ОткрытьФайл() а не создать?
12 Reset
 
22.01.13
12:19
(8) А, хотя видимо если уже сужествует и открыт в другой базе, то не удается перезаписать (пересоздать)
13 shock3r
 
22.01.13
12:30
(12) да совершенно верно... один будет выгружать из dbf в дос, а второй будет пытаться выгрузить из 1С в dbf, нужно было эту ситуация предусмореть
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший