helpf.pro
Регистрация

v7: ДБФ

areavel
14.02.2013 08:46Прочитано: 1112
Здравствуйте. Вопрос в следующем.
При проведении документа "направление", анкетные данные (ФИО, адрес, день рождения) записываются в файл ДБФ, необходимо делать проверку: если в файл уже записаны эти данные
не делать новую запись. Делаю файл *.cdx, но программа вылетает. Если кто сталкивался с похожим заданием подскажите как сделали.

Код 1C v 7.x
 Процедура Сформировать()

База=СоздатьОбъект("xBase");

База.ДобавитьПоле("NAME",2,255,0);
База.ДобавитьИндекс("IDXNAME","NAME",0,0,"");

База.СоздатьФайл("D:\Shared\Николай\Обновления\Платные\Test.dbf","D:\Shared\Николай\Обновления\Платные\Test.cdx");

БАза.Добавить();
База.УстановитьЗначениеПоля("NAME","Иванов");
База.Записать();

Сообщить("Файл создан");
База.ЗакрытьФайл();

КонецПроцедуры


При таком коде программа вылетает.
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
14.02.2013 09:57Ответ № 1
(0) areavel, попробуй в путях к файлом не использовать кирилицу
а лучше вообще - D:\Test.dbf и D:\Test.cdx
areavel
14.02.2013 11:38Ответ № 2
результат тот же , вылетает 1с. Притом файлы в обоих случаях создаются.
E_Migachev
14.02.2013 12:14Ответ № 3
(2) areavel, а что за ошибку пишет?
areavel
14.02.2013 12:56Ответ № 4
ошибок нет, просто вылетает программа, пробовал на двух машинах.
Код 1C v 7.x
 База.ДобавитьИндекс("IDXNAME","NAME",0,0,"");

если этой строчки нет, тогда все нормально работает.
E_Migachev
14.02.2013 14:39Ответ № 5
странно, вроде все правильно указано, какая платформа?
вот рабочий пример:
Код 1C v 7.x
 Файл = СоздатьОбъект("XBase");
Файл.ДобавитьПоле("NAME", 1, 19, 3);
Файл.ДобавитьПоле("PRICE", 2, 25, 0);
Файл.ДобавитьИндекс("IDXCODE", "CODE", 1, 0, "");
Файл.ДобавитьИндекс("IDXNAME", "NAME", 0, 0, "");
Файл.ДобавитьИндекс("IDXNAMECODE", "NAME+CODE", 0, 0, "");
Файл.СоздатьФайл("mydb.dbf", "mydb.cdx");

//1-й вариант
Файл.ТекущийИндекс("IDXNAME");
Файл.Найти("Иванов",0); //передается значение и режим поиска

//2-й вариант
Файл.ТекущийИндекс("IDXNAMECODE");
Файл.Ключ.NAME = "Иванов";
Файл.Ключ.CODE = 123;
Файл.НайтиПоКлючу(0);

//после сбоя рекомендуется заново переформировать все индексы
Файл.Переиндексировать();
areavel
14.02.2013 14:50Ответ № 6
бух 7.70.25.
areavel
14.02.2013 16:51Ответ № 7
Получился вот такой код:
Код 1C v 7.x
 //*******************************************
Процедура Сформировать()
Файл = СоздатьОбъект("XBase");
Файл.ДобавитьПоле("NAME", 2, 25, 0);
Файл.ДобавитьПоле("FAM", 2, 25, 0);

Файл.ДобавитьИндекс("IDXN", "NAME", 0, 0, "");
Файл.ДобавитьИндекс("IDXF","FAM",0, 0, "");

Файл.ОткрытьФайл("D:\Shared\Николай\Обновления\Платные\Test.dbf", "D:\Shared\Николай\Обновления\Платные\Test.cdx");

Файл.ТекущийИндекс("IDXN");
Файл.Ключ.NAME="Игорь";
Если Файл.НайтиПоКлючу(0)=1 Тогда
Файл.ТекущийИндекс("IDXF");
Файл.Ключ.FAM="Иванов";
Если Файл.НайтиПоКлючу(0)=1 Тогда
Сообщить("найден, записи нет");
Иначе
Файл.Добавить();
Файл.УстановитьЗначениеПоля("NAME","Игорь");
Файл.УстановитьЗначениеПоля("FAM", "Иванов");
КонецЕсли;
КонецЕсли;

Файл.Записать();
Файл.ЗакрытьФайл();

Сообщить("Файл создан");

КонецПроцедуры


Вроде на правильном пути, буду капать дальше. Спасибо за помощь.
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.