Имя: Пароль:
1C
1С v8
как загрузить в один документ "счет на оплату покупателю"-данные из 3 разных dbf
,
0 Taffy
 
04.06.12
11:42
Когда выгружались все данные в один dbf делала так:

ДБФ = Новый XBase;
     ДБФ.ОткрытьФайл(ПутьКФайлу);
     ДБФ.Кодировка=КодировкаXBase.OEM;
     //Проверка на наличие записей

  Если ДБФ.КоличествоЗаписей() = 0 Тогда
     Сообщить("Файл данных пуст");
     ДБФ.ЗакрытьФайл();
     //Возврат                    

  КонецЕсли;
       //Переходим на первую строку файла

   ДокСчет=Документы.СчетНаОплатуПокупателю;    
   ДБФ.Первая();
   ПредыдущийНомер = 0;
     Док=Неопределено;
 
   Пока Истина Цикл

   //Создадим новый документ

         
     ТекущийНомер=ДБФ.NUMBERD;
    Дата=ДБФ.DATE;
     Если ТекущийНомер <> ПредыдущийНомер  Тогда
       
        //записываем предыдущий документ

     Если Док<>Неопределено тогда
        Док.Записать();
     КонецЕсли;  
     
   Если ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата)=ДокСчет.ПустаяСсылка() тогда
       //переходим к следующему документу

   
     Док = ДокСчет.СоздатьДокумент();
     НовыйДокумент=Истина;    
     Док.Номер= СокрЛП(ДБФ.NUMBERD);
     Док.Дата = Дата;
     Док.Организация = Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG));
     Док.ВалютаДокумента =Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VALD));
     Док.Контрагент=Справочники.Контрагенты.НайтиПоНаименованию(СокрЛП(ДБФ.KONTR));
     Док.СтруктурнаяЕдиница = Справочники.БанковскиеСчета.НайтиПоНаименованию(СокрЛП(ДБФ.NAMEBS));        
     ДоговорКонтрагента=Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
     ДоговорКонтрагента.Владелец = Док.Контрагент.Ссылка;
     ДоговорКонтрагента.Наименование = СокрЛП(ДБФ.NAMED);
     ДоговорКонтрагента.Номер = СокрЛП(ДБФ.NUMBER);
     ДоговорКонтрагента.ВидДоговора = Вычислить("Перечисления.ВидыДоговоровКонтрагентов."+СокрЛП(ДБФ.VID));
     ДоговорКонтрагента.Дата = СокрЛП(ДБФ.DATED);
     ДоговорКонтрагента.ВалютаВзаиморасчетов=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL));
     ДоговорКонтрагента.Организация =Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG));
     ДоговорКонтрагента.Записать();
     Док.ДоговорКонтрагента=ДоговорКонтрагента.Ссылка;
     Док.КратностьВзаиморасчетов=1;
    //Док.Записать();

   
     Банк= Справочники.Банки.СоздатьЭлемент();
      //Банк.КоррСчет=СокрЛП(ДБФ.KORS);

      //Банк.Код=СокрЛП(ДБФ.BIK);

     Банк.Наименование=СокрЛП(ДБФ.NAMEB);
     Банк.Записать();

     
      БанкСчет=Справочники.БанковскиеСчета.СоздатьЭлемент();
      БанкСчет.Владелец=Справочники.Организации.НайтиПоНаименованию(СокрЛП(ДБФ.ORG));
      БанкСчет.Банк=Справочники.Банки.НайтиПоКоду(ДБФ.BIK);
      БанкСчет.Наименование=СокрЛП(ДБФ.NAMEBS);
      БанкСчет.ВалютаДенежныхСредств=Справочники.Валюты.НайтиПоНаименованию(СокрЛП(ДБФ.VAL));
      //БанкСчет.НомерСчета=СокрЛП(ДБФ.COUNT);

      Банк.Записать();
      БанкСчет.Записать();
 
  иначе
     ДокСсылка=ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата);
     Док=ДокСсылка.ПолучитьОбъект();
     НовыйДокумент=Ложь;
 КонецЕсли;
КонецЕсли;  
  //Заполним табличную часть "Товары"

      ТекНоменклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM));
      Если НовыйДокумент тогда
      НоваяСтрока=Док.Товары.Добавить();
      НоваяСтрока.Номенклатура=ТекНоменклатура;
  иначе
      НайденныеСтроки=Док.Товары.НайтиСтроки(Новый Структура("Номенклатура",ТекНоменклатура));
     
      Если НайденныеСтроки.Количество()>0 тогда
          НоваяСтрока=НайденныеСтроки[0];
      иначе
      НоваяСтрока=Док.Товары.Добавить();
      НоваяСтрока.Номенклатура=ТекНоменклатура;
  КонецЕсли;
  Конецесли;
      //НоваяСтрока.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM));

      НоваяСтрока.ЕдиницаИзмерения= Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(СокрЛП(ДБФ.ED));
      НоваяСтрока.Количество=СокрЛП(ДБФ.KOL);
      НоваяСтрока.Цена=СокрЛП(ДБФ.PRICE);
      НоваяСтрока.СтавкаНДС=СокрЛП(ДБФ.NDS);
     
  //Заполним табличную часть "Оплачено"

      ТекПлатежное=СокрЛП(ДБФ.NDOK);
      Если НовыйДокумент тогда
          НоваяОплачено= Док.Оплата.Добавить();
          НоваяОплачено.НомерДокумента=ТекПлатежное;
      иначе
          НайденныеСтроки=Док.Оплата.НайтиСтроки(Новый Структура("НомерДокумента",ТекПлатежное));
      //НоваяОплачено= Док.Оплата.Добавить();

 
  Если НайденныеСтроки.Количество()>0 тогда
          НоваяОплачено=НайденныеСтроки[0];
  иначе
           НоваяОплачено= Док.Оплата.Добавить();
       НоваяОплачено.НомерДокумента=ТекПлатежное;
   КонецЕсли;
   КонецЕсли;
          НоваяОплачено.ДатаОплаты=СокрЛП(ДБФ.DATEO);
       НоваяОплачено.Сумма=СокрЛП(ДБФ.SUM);
      //НоваяОплачено.НомерДокумента=СокрЛП(ДБФ.NDOK);

           
  //Заполним табличную часть "Отгружено"

  ТекНоменклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM));
  Если НовыйДокумент тогда
      НоваяОтгружено= Док.Отгрузка.Добавить();
      НоваяОтгружено.Номенклатура=ТекНоменклатура;
  иначе
      НайденныеСтроки=Док.Отгрузка.НайтиСтроки(Новый Структура("Номенклатура",ТекНоменклатура));
       Если НайденныеСтроки.Количество()>0 тогда
                    НоваяОтгружено=НайденныеСтроки[0];
              иначе
                    НоваяОтгружено=Док.Отгрузка.Добавить();
                    НоваяОтгружено.Номенклатура=ТекНоменклатура;
              КонецЕсли;
      конецЕсли;
      НоваяОтгружено.ДатаОтгрузки=СокрЛП(ДБФ.DATEOT);
      НоваяОтгружено.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(ДБФ.NOM));
      НоваяОтгружено.Количество=СокрЛП(ДБФ.KOL);
      НоваяОтгружено.Цена=СокрЛП(ДБФ.PRICE);
      НоваяОтгружено.Сумма=СокрЛП(ДБФ.SUMOT);
//КонецЕсли;

//иначе

//      ДокСсылка=ДокСчет.НайтиПоНомеру(ТекущийНомер,Дата);

//      Док=ДокСсылка.ПолучитьОбъект();

//КонецЕсли;


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

  Если Док<>Неопределено тогда
     Док.Записать();
  КонецЕсли;
1 vicof
 
04.06.12
11:43
без фотки - никак
2 Taffy
 
04.06.12
11:50
фотка кода?
3 Азат
 
04.06.12
11:52
(2) ага, топлесс-кодинг
4 Wern
 
04.06.12
11:54
А в чем проблема то? открыть три дбфки и загрузить то что нужно.
5 Жан Пердежон
 
04.06.12
12:02
(4) impossible!!!
6 zva
 
04.06.12
12:12
(0) А в чем проблема? Считать последовательно из каждой dbf нужные данные в ТЗ (может несколько ТЗ), выложить фотку, загрузить данные из ТЗ в один документ
7 mirosh
 
04.06.12
12:14
(0) если такая проблема - считать из трех разных dbf, то вот тебе ссылка на утилиту, которая "склеивает" разные dbf-файлы в один (ищет по схожим колонкам).
http://it-konsultant.ru/pumpdbf.html
8 sapphire
 
04.06.12
12:16
Пипец.... что вы пишите?!
Надо использовать ADO для доступа к dbf.
Надо знать структуру таблиц.
(7) Нафиг не нужно, можно использовать UNION ALL
9 Taffy
 
04.06.12
12:24
так как правильнее сделать ?подскажите пожалуйста
10 mehfk
 
04.06.12
12:26
(9) Зайти в ЛК и нажать "фотография".
11 sapphire
 
04.06.12
12:26
(9)
1. Выяснить структуру таблиц dbf.
2. Написать код загрузки из таблиц через ADO.
12 sapphire
 
04.06.12
12:27
(0) dbf предоставляет внешний контрагент или генерит какая-то своя система?
13 Taffy
 
04.06.12
12:34
1.структура таблиц выяснена
14 Taffy
 
04.06.12
12:35
из Галактики выгружаются данные в dbf.своя система
15 Taffy
 
04.06.12
12:46
:)поняла про фото
16 shuhard
 
04.06.12
13:23
(8) + 1
17 Taffy
 
04.06.12
13:33
есть варианты еще кроме как через ADO??
18 shuhard
 
04.06.12
13:35
(17) до фига
19 Taffy
 
04.06.12
13:46
можете подсказать?
20 sapphire
 
04.06.12
13:55
(17) ADO - всего лишь способ доступа к данным.
Неужели непонятно, что таблицы связаны по ключу и необходимо использовать запрос, а не бегать курсором по таблицам.
Как вариант считайте Dbf файлы XBase-ом в таблицы значений, поместите эти таблицы запросом во временные таблицы.
Использую язык запросов получите агрегированнные данные создаваемых документов.
21 sapphire
 
04.06.12
13:57
(17) Также можно использовать индексы XBase для ускорения.
Если Вы понимаете, что и в какой таблице лежит, то непонятно в чем проблема?
22 Taffy
 
04.06.12
14:09
поняла.спасибо
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс