Имя: Пароль:
1C
1С v8
Загрузка из DBF в документ ПоступлениеТоваровУслуг
,
0 azeml
 
15.12.13
15:27
Здравствуйте ........! Вот такая проблема!
Выгружают ДБФ из реализации все оки, а загрузить НЕ Выходит конкретнее, загрузка получается только в каждый документ оно лепит только 1-на позицию, а если в документе есть 2-е и более позиций не получается как закачать все позиции?

БД = Новый XBase;
       БД.ОткрытьФайл("C:\Tovaru.dbf");

    Орг = Справочники.Организации.НайтиПоКоду("000000001");

    КонтАг = Контр123;
    ДогКонт = ДогКонт123;
    сч = 0;
      
    НомерДок = БД.DATA;
        
    Пока БД.Следующая() Цикл
        
        док=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        док.Контрагент = КонтАг;
        док.Организация = Орг;
        док.ДоговорКонтрагента = ДогКонт123;
        док.Дата = БД.DATA;
        
        сч = сч +1;
              
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = БД.Nom;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
    
          
            док.Комментарий =БД.Koment;
            док.Записать();
            Сообщить(сч);
            КонецЦикла;
    
БД.ЗакрытьФайл();
1 vicof
 
15.12.13
15:44
вынести создание документа за цикл
2 azeml
 
15.12.13
15:55
(1)  а что это даст?
3 Oleg_ka
 
15.12.13
16:00
Лучше 40 раз по разу, чем ни разу 40 раз?
Это даст создание документа только один раз...
Ну и Записать и Коммент под цикл вынести.
4 MKZM
 
15.12.13
16:02
док.Записать(); тоже
5 azeml
 
15.12.13
16:02
(3) так у меня ведь не 1 документ!
6 George Wheels
 
15.12.13
16:08
(5) Ну так отсортируй по БД.Nom и отслеживай его изменение.
7 Oleg_ka
 
15.12.13
16:09
Тогда при выгрузке добавь еще одно поле - номер документа (реализации).
При загрузке будешь смотреть: если в полученной строке номер НЕ такой как в предыдущей - делаем новый документ, иначе добавляем в старый...
Код писать НЕ буду так как он очень легкий... как-то так...
8 George Wheels
 
15.12.13
16:09
(6) Нет. Поторопился. Думал БД.Nom это номер документа.
9 azeml
 
15.12.13
16:25
(7) Загружаю я в 2 базы одна шапка друга товари.И пробовали пусти проверку но не получилось.


БДШ = Новый XBase;
       БДШ.ОткрытьФайл("C:\shapka.dbf");
    БД = Новый XBase;
       БД.ОткрытьФайл("C:\Tovaru.dbf");



    Орг = Справочники.Организации.НайтиПоКоду("000000001");

    КонтАг = Контр123;
    ДогКонт = ДогКонт123 ;
    сч = 0;
       
    НомерДок = БД.KOD;
    НомерДок1 = БДШ.KOD;
        
    Пока БД.Следующая() Цикл
        
        док=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();

НомерДок = БД.KOD;
    НомерДок1 = БДШ.KOD;
        док.Контрагент = КонтАг;
        док.Организация = Орг;
        док.ДоговорКонтрагента = ДогКонт123;
        док.Дата = БД.DATA ;
        
        сч = сч +1 ;
        Сообщить(сч);
        Пока Истина Цикл
            Если НомерДок = НомерДок1 Тогда  
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = БД.Nom;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
              Иначе
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = БД.Nom;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
            док.Комментарий =БД.Koment;
            док.Записать();
        КонецЕсли;
        КонецЦикла;
            сч = сч + 1;    
            Сообщить(сч);
            КонецЦикла;
    
БД.ЗакрытьФайл();

В чем ошибка?
10 azeml
 
15.12.13
17:25
Процедура КнопкаВыполнитьНажатие(Кнопка)
    БДШ = Новый XBase;
       БДШ.ОткрытьФайл("C:\shapka.dbf");
    БД = Новый XBase;
       БД.ОткрытьФайл("C:\Tovaru.dbf");



    Орг = Справочники.Организации.НайтиПоКоду("000000001");

    КонтАг = Контр123;
    ДогКонт = ДогКонт123 ;
    сч = 0;
       
    НомерДок = БД.KOD;
    НомерДок1 = БДШ.KOD;
    
    Сообщить(НомерДок);
    Сообщить(НомерДок1);
        
    Пока БД.Следующая() Цикл
    Пока БДШ.Следующая() Цикл      
                
        НомерДок2 = БД.KOD;
        НомерДок3 = БДШ.KOD;
        
        Сообщить(НомерДок2);
        Сообщить(НомерДок3);

        
        док=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        док.Контрагент = КонтАг;
        док.Организация = Орг;
        док.ДоговорКонтрагента = ДогКонт123;
        док.Дата = ТекущаяДата() ;
        док.ОтражатьВБухгалтерскомУчете = Истина;
        док.ОтражатьВУправленческомУчете = Истина;
        док.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("грн");
        
        сч = сч +1 ;
         номен = БД.Nom;
         Номенклат = Справочники.Номенклатура.НайтиПоНаименованию(номен);
         Един =  БД.ED;
         Единиц = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(Един);
        
         Если НомерДок = НомерДок1 Тогда
            
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = Номенклат;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
        ТабЧасТов.ЕдиницаИзмерения = Единиц;
        ТабЧасТов.Коэффициент = "1";
          Иначе
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = Номенклат;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
        ТабЧасТов.ЕдиницаИзмерения = Единиц;
        ТабЧасТов.Коэффициент = "1";

    КонецЕсли;
    док.Комментарий =БДШ.Koment;
    док.Записать();

             Сообщить(сч);
            КонецЦикла;

            КонецЦикла;
    
БД.ЗакрытьФайл();

КонецПроцедуры
11 azeml
 
15.12.13
17:25
В чем ошибка?
12 Wobland
 
15.12.13
17:50
а зачем такие разные ветки в Если НомерДок = НомерДок1 Тогда
13 azeml
 
15.12.13
23:47
(12) два DBF
Сравнение.Это есть уникальный ключ.
номер документа
14 hhhh
 
16.12.13
02:14
(13) ну та же самая ошибка, вы же ничего не поменяли.

      док=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
  
у вас происходит в каждой строчке dbf. Поэтому в каждом документе ровно одна строка. Почему вы ожидаете, что в документе будет 2 строки?
15 azeml
 
16.12.13
02:47
Пока БД.Следующая() Цикл
         
                
        НомерДок2 = БД.KOD;
        НомерДок3 = БДШ.KOD;
        
        Сообщить(НомерДок2);
        Сообщить(НомерДок3);

        
        док=Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
        док.Контрагент = КонтАг;
        док.Организация = Орг;
        док.ДоговорКонтрагента = ДогКонт123;
        док.Дата = ТекущаяДата() ;
        док.ОтражатьВБухгалтерскомУчете = Истина;
        док.ОтражатьВУправленческомУчете = Истина;
        док.ВалютаДокумента = Справочники.Валюты.НайтиПоНаименованию("грн");
        
        сч = сч +1 ;
         номен = БД.Nom;
         Номенклат = Справочники.Номенклатура.НайтиПоНаименованию(номен);
         Един =  БД.ED;
         Единиц = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(Един);
      Пока БДШ.Следующая() Цикл         
         Если НомерДок = НомерДок1 Тогда
            
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = Номенклат;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
        ТабЧасТов.ЕдиницаИзмерения = Единиц;
        ТабЧасТов.Коэффициент = "1";
          Иначе
        ТабЧасТов = док.Товары.Добавить();
        ТабЧасТов.Номенклатура = Номенклат;
        ТабЧасТов.Количество = БД.Kol;
        ТабЧасТов.Цена = БД.Price;
        ТабЧасТов.ЕдиницаИзмерения = Единиц;
        ТабЧасТов.Коэффициент = "1";

    КонецЕсли;
    док.Комментарий =БДШ.Koment;
    док.Записать();

             Сообщить(сч);
            КонецЦикла;

            КонецЦикла;
16 Oleg_ka
 
16.12.13
06:25
Из какой конфигурации в какую пытаемся делать перенос данных?
17 azeml
 
16.12.13
21:10
УПП в УПП
18 zladenuw
 
16.12.13
22:21
(17) чего не использовать универсальную обработку выгрузки и загрузки хмл. вернее выгрузка и загрузка в идентичную конфигурацию.
19 Grobik
 
16.12.13
22:32
(18) +100
Если не устраивает http://programmist1s.ru/perenos-dannyih-1s/
Есть 100500 однокнопочных вариантов на инфостарте типа
http://infostart.ru/public/195701/

Зачем мучить свой мозг DBF, да еще при малой его массе?
20 Grobik
 
16.12.13
22:33
ВыгрузкаЗагрузкаДанныхXML82
21 zladenuw
 
16.12.13
22:36
(19) я так в рабочию догружал данные. когда люди на копии работали. все нормально и без гемора. заняло 5 минут :)
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс