Помощь - Поиск - Пользователи - Календарь
Полная версия: Загрузка Документов из DBF
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 8.x" > (8.х) Конфигурирование на платформе "1С:Предприятие 8.x"
Dare
Необходимо загрузить документы Приходная накладная из дбфки, при этом проверяя совпадение номеров существующих документов с полем каждой строки базы. Если имеется в наличие то просто не создаем новый док. и записи игнорируются. В базе дбф в каждой строке находяться данные реквизитов док. и одна строка табличной части. Так что для каждого документа с кучей поступившей номенклатуры в дбф целая куча строк с повторяющимися реквизитами этого документа.
Код

Процедура ЗагрузкаИзДБФНажатие(Элемент)
ФайлВВР = Новый XBase;
ФайлВВР.ОткрытьФайл("c:\PrihNakl.dbf",,Истина);

ФайлВВР.Первая();
Номр=ФайлВВР.Nam; //запоминаем номер документа (начальный)

Пока НЕ ФайлВВР.ВКонце() Цикл

//проверка есть ли такой Документ

Если Не Документы.ПриходнаяНакладная.НайтиПоНомеру(ФайлВВР.Nam,ФайлВВР.Data)=Документы.ПриходнаяНакладная.ПустаяСсылка() Тогда
Сообщить("Документ за номером №"+ФайлВВР.Nam+" уже существует!");

Если Не ФайлВВР.ВКонце() Тогда //если есть такой Док то перед Продолжить переводим строку базы и номер запоминаем новый
ФайлВВР.Следующая();
Номр=ФайлВВР.Nam;
Иначе Прервать;
КонецЕсли;

Продолжить;
КонецЕсли;


НовДок = Документы.ПриходнаяНакладная.СоздатьДокумент(); //создаем док и записываем основные реквизиты
НовДок.Дата = ФайлВВР.Data;
НовДок.Номер = ФайлВВР.Nam;
НовДок.Склад = ФайлВВР.Sklad;


Пока Номр=ФайлВВР.Nam Цикл //для табличной части проверяем с каждой новой строки базы не изменился ли номер Док

Если Справочники.Номенклатура.НайтиПоНаименованию(ФайлВВР.Mat,Истина)=Справочники.Номенклатура.ПустаяСсылка() Тогда
НовЭлемСправНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НовЭлемСправНоменклатура.Наименование=ФайлВВР.Mat;
НовЭлемСправНоменклатура.ВидНоменклатуры=Перечисления.ВидыНоменклатуры.Материал;
НовЭлемСправНоменклатура.Записать();
КонецЕсли;

Стр = НовДок.Материалы.Добавить();

Стр.Материал = ФайлВВР.Mat;
Стр.Количество = ФайлВВР.Kol;
Стр.Цена = ФайлВВР.Cena;
Стр.Сумма = ФайлВВР.Summa;

Если НЕ ФайлВВР.ВКонце() Тогда
ФайлВВР.Следующая(); //перебираем табличную часть
Иначе Прервать;
КонецЕсли;

КонецЦикла;

НовДок.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
Номр=ФайлВВР.Nam;

КонецЦикла;

ФайлВВР.ЗакрытьФайл();

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



так вот - выдает ошибку:
Ошибка при получении значения атрибута контекста (NAM): Перед выполнением операции установите объект на запись
Пока Номр=ФайлВВР.Nam Цикл

В чем проблема - почему он во втором цикле при манипуляции с полям дбф чегото требует?
Помогите новичку (про XML просьба не беспокоить)
LxS
В отладчике посмотри типы Номр и ФайлВВР.Nam.
Dare
Цитата(LxS @ 22.10.2008, 14:16) *

В отладчике посмотри типы Номр и ФайлВВР.Nam.

увы... определяет как число равное 2-м для обоих операторов условия...

LxS
Файл открыт кем-то еще или тобой через access например?
Dare
Цитата(LxS @ 22.10.2008, 14:29) *

Файл открыт кем-то еще или тобой через access например?

файл закрыть, иначе не Открыть не срабатывает. Главное обращение в теле первого цикла не вызывает ошибки....
x_under
Вот меня смущает строка НовДок.Склад = ФайлВВР.Sklad;

Склад в документе - ссылка, а в dbf это или наименование или код.
Dare
Цитата(x_under @ 23.10.2008, 13:06) *

Вот меня смущает строка НовДок.Склад = ФайлВВР.Sklad;

Склад в документе - ссылка, а в dbf это или наименование или код.

Все верно, это я исправил, впрочем также как и с номенклатурой в табличной части. Но это не вызывало ошибок, просто поля были пустыми.
Я переписал код в один цикл и все заработало. Просто неясно почему в ситуации с двумя циклами обращение к ДБФ вызывало ошибку...
Так что тему можно закрыть... всем спасибо)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2009 Invision Power Services, Inc.