8.х Загрузка Документов из DBF

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем gravis, 22 окт 2008.

  1. TopicStarter Overlay
    gravis
    Offline

    gravis

    Регистрация:
    17 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Необходимо загрузить документы Приходная накладная из дбфки, при этом проверяя совпадение номеров существующих документов с полем каждой строки базы. Если имеется в наличие то просто не создаем новый док. и записи игнорируются. В базе дбф в каждой строке находяться данные реквизитов док. и одна строка табличной части. Так что для каждого документа с кучей поступившей номенклатуры в дбф целая куча строк с повторяющимися реквизитами этого документа.
    Код:
    Процедура ЗагрузкаИзДБФНажатие(Элемент)
    ФайлВВР = Новый XBase;
    ФайлВВР.ОткрытьФайл("c:\PrihNakl.dbf",,Истина);
    
    ФайлВВР.Первая();
    Номр=ФайлВВР.Nam;    //запоминаем номер документа (начальный)
    
    Пока НЕ ФайлВВР.ВКонце() Цикл
    
    //проверка есть ли такой Документ
    
    Если Не Документы.ПриходнаяНакладная.НайтиПоНомеру(ФайлВВР.Nam,ФайлВВР.Data)=Документы.ПриходнаяНакладная.ПустаяСсылка() Тогда
    Сообщить("Документ за номером №"+ФайлВВР.Nam+" уже существует!");
    
    Если Не ФайлВВР.ВКонце() <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/тогда')">Тогда	</span>    //если есть такой Док то перед Продолжить переводим строку базы и номер запоминаем новый
    ФайлВВР.Следующая();
    Номр=ФайлВВР.Nam;
    Иначе Прервать;
    КонецЕсли;
    
    Продолжить;
    КонецЕсли;
    
    
    НовДок = Документы.ПриходнаяНакладная.СоздатьДокумент(); //создаем док и записываем основные реквизиты
    НовДок.Дата = ФайлВВР.Data;
    НовДок.Номер = ФайлВВР.Nam;
    НовДок.Склад = ФайлВВР.Sklad;
    
    
    Пока Номр=ФайлВВР.Nam Цикл        //для табличной части проверяем с каждой новой строки базы не изменился ли номер Док
    
    Если Справочники.Номенклатура.НайтиПоНаименованию(ФайлВВР.Mat,Истина)=Справочники.Номенклатура.ПустаяСсылка() Тогда
    НовЭлемСправНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
    НовЭлемСправНоменклатура.Наименование=ФайлВВР.Mat;
    НовЭлемСправНоменклатура.ВидНоменклатуры=Перечисления.ВидыНоменклатуры.Материал;
    НовЭлемСправНоменклатура.Записать();
    КонецЕсли;
    
    Стр = НовДок.Материалы.Добавить();
    
    Стр.Материал = ФайлВВР.Mat;
    Стр.Количество = ФайлВВР.Kol;
    Стр.Цена = ФайлВВР.Cena;
    Стр.Сумма = ФайлВВР.Summa;
    
    Если НЕ ФайлВВР.ВКонце() Тогда
    ФайлВВР.Следующая();   //перебираем табличную часть
    Иначе Прервать; 
    КонецЕсли;
    
    КонецЦикла;
    
    НовДок.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный);
    Номр=ФайлВВР.Nam; 
    
    КонецЦикла;	
    
    ФайлВВР.ЗакрытьФайл();
    
    КонецПроцедуры
    
    
    так вот - выдает ошибку:
    Ошибка при получении значения атрибута контекста (NAM): Перед выполнением операции установите объект на запись
    Пока Номр=ФайлВВР.Nam Цикл

    В чем проблема - почему он во втором цикле при манипуляции с полям дбф чегото требует?
    Помогите новичку (про XML просьба не беспокоить)
  2. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    В отладчике посмотри типы Номр и ФайлВВР.Nam.
  3. TopicStarter Overlay
    gravis
    Offline

    gravis

    Регистрация:
    17 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    увы... определяет как число равное 2-м для обоих операторов условия...
  4. LxS
    Offline

    LxS Разработчик

    Регистрация:
    5 апр 2007
    Сообщения:
    680
    Симпатии:
    0
    Баллы:
    26
    Файл открыт кем-то еще или тобой через access например?
  5. TopicStarter Overlay
    gravis
    Offline

    gravis

    Регистрация:
    17 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    файл закрыть, иначе не Открыть не срабатывает. Главное обращение в теле первого цикла не вызывает ошибки....
  6. x_under
    Offline

    x_under Модераторы Команда форума Модератор

    Регистрация:
    25 апр 2007
    Сообщения:
    2.576
    Симпатии:
    13
    Баллы:
    29
    Вот меня смущает строка НовДок.Склад = ФайлВВР.Sklad;

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

    gravis

    Регистрация:
    17 окт 2008
    Сообщения:
    42
    Симпатии:
    0
    Баллы:
    1
    Все верно, это я исправил, впрочем также как и с номенклатурой в табличной части. Но это не вызывало ошибок, просто поля были пустыми.
    Я переписал код в один цикл и все заработало. Просто неясно почему в ситуации с двумя циклами обращение к ДБФ вызывало ошибку...
    Так что тему можно закрыть... всем спасибо)

Поделиться этой страницей