Имя: Пароль:
1C
1С v8
Загрузка из ДБФ!
0 Aleksei_Pro
 
02.10.11
17:48
Если НЕ ЗначениеЗаполнено(ЭлементыФормы.ИмяФайла.Значение) Тогда
        Предупреждение("Не указан файл выгруженных данных.");    
        Возврат;
    Иначе
        Файл = новый XBase;
        Файл.ОткрытьФайл(ЭлементыФормы.ИмяФайла.Значение,,Ложь);
        Пока Файл.ВКонце() = 0 Цикл
            Запрос = новый Запрос;
            Запрос.УстановитьПараметр("Код1",Справочники.Контрагенты.НайтиПоКоду(СокрЛП(Файл.KodVlad)));
            Запрос.УстановитьПараметр("Код2",Справочники.Организации.НайтиПоКоду(СокрЛП(Файл.KodOrg)));
            Запрос.УстановитьПараметр("ВидДоговора",Перечисления.ВидыДоговоровКонтрагентов.СПокупателем);
            Запрос.Текст =
             "ВЫБРАТЬ
             |    ДоговорыКонтрагентов.Владелец,
             |    ДоговорыКонтрагентов.Организация,
             |    ДоговорыКонтрагентов.ВидДоговора,
             |    ДоговорыКонтрагентов.Ссылка
             |ИЗ
             |    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
             |ГДЕ
             |    ДоговорыКонтрагентов.Владелец = &Код1
             |    И ДоговорыКонтрагентов.Организация = &Код2
             |    И ДоговорыКонтрагентов.ВидДоговора = &ВидДоговора";
             Если Запрос.Выполнить().Пустой() Тогда
                 Продолжить;
                 Сообщить("не найден договор");
             КонецЕсли;
             Рез = запрос.Выполнить().Выбрать();
             пока рез.Следующий() цикл
             догов = Рез.Ссылка.ПолучитьОбъект();
             догов.Код  = СокрЛП(Файл.NomenDog);
             догов.наименование = СокрЛП(Файл.NaimDo);
             догов.Записать();
             Прервать;
             КонецЦикла;        
            Сообщить("Записан договор:  ");
            Файл.Следующая();
        КонецЦикла;
        Файл.ЗакрытьФайл();    
    КонецЕсли;


Вот обработка по загрузке из дбф, почему 1 запись находит, а потом не находи больше ни чего, хотя по кодам все есть!
1 MaxS
 
02.10.11
17:52
Ого. Четыре запроса в цикле.
Было бы лучше загрузить дбв в таблицу значений, которую загрузить в запрос и одним запросом всё выбрать.
2 Aleksei_Pro
 
02.10.11
17:53
(1) эт тоже можно, но тут то в чем косяк?
3 zladenuw
 
02.10.11
17:54
Если Запрос.Выполнить().Пустой() Тогда
                 Продолжить;
                 Сообщить("не найден договор");
             КонецЕсли;. вот тут у тебя продолжить, попадаем в начало цикла, а Файл.Следующая();  не сделал
4 zladenuw
 
02.10.11
17:54
Продолжить
   Немедленно передает управление в начало цикла, где производится вычисление и проверка условий выполнения цикла.
   Операторы, следующие в теле цикла за ним, на данной итерации обхода не выполняются.
5 Aleksei_Pro
 
02.10.11
17:56
ох точно спасибо)
6 aleks-id
 
02.10.11
18:36
(1) а слабо сразу запрос к дбф сделать? что за бред - грузить сначала в ТЗ а потом запросом оттуда дергать?
7 MaxS
 
02.10.11
18:42
(6) левое соединение объектов 1С к внешнему файлу dbf?
пока не возникало необходимости.  Не знаю как это делается ;)
8 zladenuw
 
02.10.11
18:46
а еще лучше использовать 8.2.14 и туда добавить такую таблицу :)
9 aleks-id
 
02.10.11
18:48
(7) я имел ввиду, что использование XBase - моветон ;)
10 Reaper_1c
 
02.10.11
18:51
А использовать универсальную загрузку данных из табличного документа с ИТС слабо?
11 aleks-id
 
02.10.11
18:53
+(9) кстати, из дбф запросом можно выдернуть только те записи, которые есть в базе, и работать только с ними без всяких проверок.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.