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

v8: Запись в файл dbf из 1С

Guzel
02.02.2015 13:25Прочитано: 4179

Добрый день!

Подскажите пожалуйста, уже сломала всю голову.

Можно ли из 1С открыть уже существующий файл формата dbf, выполнить поиск в этом файле и если по индексу ни одной строки не нашлось, добавить в открытый файл запись?

Если да, подскажите пож-ста как это сделать? Ничего не получается. Упорно не хочет сохранять файл

Что я делаю не так?

Вот мой код:

Код 1C v 8.х
 Запрос = Новый Запрос;
//...
Результат = Запрос.Выполнить().Выгрузить();

// В начале срабатывает запрос, в качестве результата выводит ТЗ из одной колонки ЛицевойСчет.Ссылка КАК ЛицевойСчет
//Запрос точно срабатывает (проверяла в консоли запросов и в отладчике), например в качестве результата запроса получили две строки:
// 123456
// 987654
 
   
ИмяФайла = "NewLS.DBF";
ИмяИндексногоФайла = "IndNewLS.cdx";
КаталогОбмена="D:\MyPath\";


ПолноеИмяФайла = СокрЛП(КаталогОбмена+ИмяФайла);
ПолноеИмяИндексногоФайла = КаталогОбмена+ИмяИндексногоФайла;


ДБФФайл = Новый XBase();
// Данный файл уже существует в указанном каталоге, открываем его. Режим ТолькоЧтение явно устанавливаю в "ложь" 
ДБФФайл.ОткрытьФайл(ПолноеИмяФайла,ПолноеИмяИндексногоФайла,Ложь);
ДБФФайл.АвтоСохранение=Истина;
ДБФФайл.Последняя();

// в файле, например, существует одна запись, лицевой счет 555555, т.е. по запросу ни одна из записей (123456 или 987654) не найдется
// каждая из них должна быть добавлена в файл
// ищем по индексу, индекс установлен на поле "ЛицевойСчет"
Для Каждого строка из Результат Цикл 
ДБФФайл.ТекущийИндекс = ДБФФайл.индексы.IDXLs;
если НЕ ДБФФайл.Найти(строка.ЛицевойСчет,"=") Тогда

ЛицевойСчет = строка.ЛицевойСчет;
ДБФФайл.Добавить();

ДБФФайл.Ls1 = ЛицевойСчет.Код1;
        ДБФФайл.Ls2 = ЛицевойСчет.Код2;
       
ДБФФайл.FIO = ЛицевойСчет.Владелец; 
ДБФФайл.phoneMob = ЛицевойСчет.ТелефонСотовый;
ДБФФайл.phoneSt = ЛицевойСчет.ТелефонСтационарный;
 
ДБФФайл.Записать();
КонецЕсли;
КонецЦикла;

    ДБФФайл.ЗакрытьФайл();


Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
02.02.2015 15:06Ответ № 1

какая ошибка вылетает?

зачем каждый раз записывать в цикле? - запишите перед закрытием!

Guzel
03.02.2015 04:37Ответ № 2

В том то и дело, что не возникает никакой ошибки, а потом открываешь данный файл для просмотра - в нем все та же одна строка "555555"

Guzel
03.02.2015 05:16Ответ № 3

Судя по отладчику, ДБФФайл.Найти(строка.ЛицевойСчет,"=") - всегда выдает истину, соответственно по условию "если НЕ" не проходит и новые строки не добавляются

escritor
03.02.2015 11:10Ответ № 4
ДБФФайл.Найти(строка.ЛицевойСчет,"=")
какой тип у строка.ЛицевойСчет?
Guzel
04.02.2015 05:27Ответ № 5

строка.ЛицевойСчет - Тип Строка 

Я решила не заморачиваться с индексами, Мучалась-мучалась, и решила сделать простым перебором, ибо в файле у меня всегда будет всего порядка 200 строк.

E_Migachev
04.02.2015 19:36Ответ № 6

(5) главное работает )

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