Вход | Регистрация


1С:Предприятие ::

Метки: 

Загрузка в табличную часть документа данных из DBF-файла

Я
   Mitka90
 
07.12.17 - 08:58
Здравствуйте!

Нужно вывести данные в табличную часть документа "ДоговорНаПоставкуГаза" из DBF-файла.
Имеются реквизиты в табличной части "Реестр": ЛицевойСчет, ФИО, ПочтовыйИндекс, УчастокОбслуживания, НаселенныйПункт, Улица, НомерДома, НомерКвартиры,  НомерКомнаты, ДатаЗаключенияДоговораНаПоставкуГаза, НомерДоговораНаПоставкуГаза, ДатаВыдачиДоговораНаРуки, НомерМобильногоТелефона, НомерДомашнегоТелефона, КодАдресаПоФИАС.

Сама база данных просчитывается с помощью подобного кода по нажатию кнопки "Загрузить":

Процедура ДействияФормыВыгрузить(Кнопка)
Таблица = Новый XBase;
    Таблица.ОткрытьФайл( 
        "D:\dogovor\выгрузка\281117.dbf",// путь к базе

        ,// путь к индексу

        Истина// только чтение

    );
 
    Сообщить("В таблице " + Таблица.КоличествоЗаписей() + " записей.");
    Сообщить("Таблица имеет кодировку: " + Таблица.Кодировка);
 
    Таблица.Первая();// перешли к первой записи

    Пока Не Таблица.ВКонце() Цикл
        Если Не Таблица.ЗаписьУдалена() Тогда
            Сообщить(
                Строка(Таблица.LS) + " " +
                Таблица.FIO + " " + 
                Таблица.INDEX + " " +
                Таблица.RAION + " " +
                Таблица.NASPUNKT + " " +
                Таблица.UL + " " +
                Таблица.DOM + " " +
                Таблица.KV + " " +
                Таблица.KOMNATA + " " +
                Таблица.DDOG + " " +
                Таблица.NDOG + " " +
                Таблица.DVID + " " +
                Таблица.T_SOT + " " +
                Таблица.T_DOM + " " +
                Таблица.KOD            
            );
        КонецЕсли;
        Таблица.Следующая();// переходим к следующей записи

            
            КонецЦикла;    

    Таблица.ЗакрытьФайл();

КонецПроцедуры
 
 
   Рэйв
 
1 - 07.12.17 - 09:00
Продолжайте наблюдение
   igorPetrov
 
2 - 07.12.17 - 09:02
(0) Здравствуйте!
Если нужно, выводите.
   shadow_sw
 
3 - 07.12.17 - 09:13
франчайзи набрали опять студентов? куча тем с глупыми вопросами
(0) пользуемся поиском, все разжевано сто раз
   Mitka90
 
4 - 07.12.17 - 09:14
Я вообще-то по существу спрашиваю: как можно осуществить вывод данных в табличную часть документа из DBF-файла?

Для кого-то глупые вопросы, а для кого-то - нет.
Не стоить равнять всех под одну гребёнку.
   Рэйв
 
5 - 07.12.17 - 09:16
(4)>>как можно осуществить вывод данных в табличную часть документа из DBF-файла

1.прочитать дбф файл
2.найти все соответсвующие ссылки в базе по данным файла
3.заполнить табличную часть
   igorPetrov
 
6 - 07.12.17 - 09:17
(4) Так же, как вывод в табличную часть откуда угодно.
В (3) написано правильно, пользуйтесь поиском, не ленитесь.
   igorPetrov
 
7 - 07.12.17 - 09:17
(5) +100
   shadow_sw
 
8 - 07.12.17 - 09:20
(4) по существу отвечают же - можно
следующий
   shadow_sw
 
9 - 07.12.17 - 09:21
это оказывается вторая часть Вывод в табличную часть данных
   igorPetrov
 
10 - 07.12.17 - 09:22
(9) Ух, ты какой плодовитый!
 
 Рекламное место пустует
   hhhh
 
11 - 07.12.17 - 09:34
(4) вы неправы: это называется не вывод, а загрузка.
   shadow_sw
 
13 - 07.12.17 - 09:42
(12) а какой должен быть толк? готовый код на тарелочке?
   Масянька
 
14 - 07.12.17 - 09:45
(0) Если ты программист: на инфостарте есть множество разнообразных загрузок в ТЧ док-та из excel-файла - качай, смотри, разбирайся.
Если ты не программист:на инфостарте есть множество разнообразных загрузок в ТЧ док-та из excel-файла - качай, смотри, разбирайся.
Ну, и готовый тебе никто просто не даст (время халявы кончилось). Теперь все стоит денег.
   SSSSS_AAAAA
 
15 - 07.12.17 - 09:50
(12)Какой толк ожидается от простого сообщения о наличии чего-то там у тебя? Даже вопроса нет, даже бестолкового.
   Mitka90
 
16 - 08.12.17 - 09:52
Получилось что-то типа такого.

Возник вопрос: как можно в данном случае вывести данные из DBF-файла в одну табличную часть одного документа?

Получается так, что данные выводятся не в один документ, а в разный документ по одной строке (если в БД 5 строк, то выводится 5 документов и т.д.). И те поля, у которых значение "Дата", не выводятся никак.

Процедура ДействияФормыЗагрузить(Кнопка)
  //Определим путь файла загрузки


   Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
   ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
   ДиалогОткрытия.Каталог = "";
   ДиалогОткрытия.МножественныйВыбор = Ложь;
   ДиалогОткрытия.Заголовок = "Выберите каталог";

   Если ДиалогОткрытия.Выбрать() Тогда
   
       Путь = ДиалогОткрытия.Каталог;
   
   КонецЕсли;

  //Создаем переменную XBase

   ДБФ = Новый XBase;

  //Открываем файл

    ДБФ.ОткрытьФайл("D:\281117.DBF");

  //Проверка на наличие записей

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

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

   ДБФ.Первая();

   Документ = Неопределено;
   Док = Неопределено;
   
   Пока Истина Цикл
   
   ЛицевойСчет = ДБФ.LS;
   ФИО = ДБФ.FIO;
   ПочтовыйИндекс = ДБФ.INDEX;
   УчастокОбслуживания = ДБФ.RAION;
   НаселенныйПункт = ДБФ.NASPUNKT;
   Улица = ДБФ.UL;
   НомерДома = ДБФ.DOM;
   НомерКвартиры = ДБФ.KV;
   НомерКомнаты = ДБФ.KOMNATA;
   ДатаЗаключенияДоговораНаПоставкуГаза = ДБФ.DDOG;
   НомерДоговораНаПоставкуГаза = ДБФ.NDOG;
   ДатаВыдачиДоговораНаРуки = ДБФ.DVID;
   НомерМобильногоТелефона = ДБФ.T_SOT;
   НомерДомашнегоТелефона = ДБФ.T_DOM;
   КодАдресаПоФИАС = ДБФ.KOD;

          Если НЕ ДБФ.NDOG = Документ Тогда

          //Записываем предыдущий документ

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

Док = Документы.ДоговорНаПоставкуГаза.СоздатьДокумент(); 
   
          //Заполняем реквизиты шапки

   Док.Дата = ТекущаяДата();
       КонецЕсли;
       
      // устанавливаете значения реквизитов ТЧ

   
   НоваяСтрока = Док.Реестр.Добавить();
   НоваяСтрока.ЛицевойСчет =  ЛицевойСчет;
   НоваяСтрока.ФИО = ФИО;
   НоваяСтрока.ПочтовыйИндекс = ПочтовыйИндекс;
   НоваяСтрока.УчастокОбслуживания = УчастокОбслуживания;
   НоваяСтрока.НаселенныйПункт = НаселенныйПункт;
   НоваяСтрока.Улица = Улица;
   НоваяСтрока.НомерДома = НомерДома;
   НоваяСтрока.НомерКвартиры = НомерКвартиры;
   НоваяСтрока.НомерКомнаты = НомерКомнаты;
   НоваяСтрока.ДатаЗаключенияДоговораНаПоставкуГаза = ДатаЗаключенияДоговораНаПоставкуГаза;
   НоваяСтрока.НомерДоговораНаПоставкуГаза = НомерДоговораНаПоставкуГаза;
   НоваяСтрока.ДатаВыдачиДоговораНаРуки = ДатаВыдачиДоговораНаРуки;
   НоваяСтрока.НомерМобильногоТелефона = НомерМобильногоТелефона;
   НоваяСтрока.НомерДомашнегоТелефона = НомерДомашнегоТелефона;
   НоваяСтрока.КодАдресаПоФИАС = КодАдресаПоФИАС;
       
      // Переходим на следующую запись

       Если не ДБФ.Следующая() Тогда
          //Если записей больше нет выходим из цикла

           Прервать;
       КонецЕсли;
   КонецЦикла;
 
  // записываем последний добавленный

   Если НЕ (Док = Неопределено) Тогда
       Док.Записать();
   КонецЕсли;
   
КонецПроцедуры
   Рэйв
 
17 - 08.12.17 - 09:53
(16)Убери создание документа за цикл и будет тебе счастье
   Масянька
 
18 - 08.12.17 - 09:54
(16) Ты про циклы слышал?
   George Wheels
 
19 - 08.12.17 - 09:59
(16) ДБФ.NDOG всегда <> Документ
   hhhh
 
20 - 08.12.17 - 10:01
(16) да, у тебя всегда

Документ = Неопределено;
   Табуретко
 
21 - 08.12.17 - 10:15
(0) позовите специалиста...
   LuciferArh
 
22 - 08.12.17 - 10:20
(21) Специалист денег попросит.
   Mitka90
 
23 - 08.12.17 - 13:43
Получилось вот так. Но ещё не выводятся в табличные части дата заключения договора и дата выдачи договора.
В чём может быть проблема?

Процедура ДействияФормыЗагрузить(Кнопка)
  //Определим путь файла загрузки


   Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
   ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
   ДиалогОткрытия.Каталог = "";
   ДиалогОткрытия.МножественныйВыбор = Ложь;
   ДиалогОткрытия.Заголовок = "Выберите каталог";

   Если ДиалогОткрытия.Выбрать() Тогда
    
       Путь = ДиалогОткрытия.Каталог;
    
   КонецЕсли;

  //Создаем переменную XBase

   ДБФ = Новый XBase;

  //Открываем файл

    ДБФ.ОткрытьФайл("D:\281117.DBF");

  //Проверка на наличие записей

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

   ДБФ.Первая();

   Документ = Неопределено;
   Док = Документы.ДоговорНаПоставкуГаза.СоздатьДокумент(); 
   Док.Дата = ТекущаяДата();

   Пока Истина Цикл
       ЛицевойСчет = ДБФ.LS;
       ФИО = ДБФ.FIO;
       ПочтовыйИндекс = ДБФ.INDEX;
       УчастокОбслуживания = ДБФ.RAION;
       НаселенныйПункт = ДБФ.NASPUNKT;
       Улица = ДБФ.UL;
       НомерДома = ДБФ.DOM;
       НомерКвартиры = ДБФ.KV;
       НомерКомнаты = ДБФ.KOMNATA;
       ДатаЗаключенияДоговораНаПоставкуГаза = ДБФ.DDOG;   
       НомерДоговораНаПоставкуГаза = ДБФ.NDOG;
       ДатаВыдачиДоговораНаРуки = ДБФ.DVID;
       НомерМобильногоТелефона = ДБФ.T_SOT;
       НомерДомашнегоТелефона = ДБФ.T_DOM;
       КодАдресаПоФИАС = ДБФ.KOD;
      
       Если НЕ ДБФ.NDOG = Документ Тогда
           
          //Записываем предыдущий документ

           Если НЕ (Док = Неопределено) Тогда
               Док.Записать();
          КонецЕсли;
          
       КонецЕсли;
        
      // устанавливаете значения реквизитов ТЧ

       НоваяСтрока = Док.Реестр.Добавить();
       НоваяСтрока.ЛицевойСчет =  ЛицевойСчет;
       НоваяСтрока.ФИО = ФИО;
       НоваяСтрока.ПочтовыйИндекс = ПочтовыйИндекс;
       НоваяСтрока.УчастокОбслуживания = УчастокОбслуживания;
       НоваяСтрока.НаселенныйПункт = НаселенныйПункт;
       НоваяСтрока.Улица = Улица;
       НоваяСтрока.НомерДома = НомерДома;
       НоваяСтрока.НомерКвартиры = НомерКвартиры;
       НоваяСтрока.НомерКомнаты = НомерКомнаты;
       НоваяСтрока.ДатаЗаключенияДоговораНаПоставкуГаза = ДатаЗаключенияДоговораНаПоставкуГаза;
       НоваяСтрока.НомерДоговораНаПоставкуГаза = НомерДоговораНаПоставкуГаза;
       НоваяСтрока.ДатаВыдачиДоговораНаРуки = ДатаВыдачиДоговораНаРуки;
       НоваяСтрока.НомерМобильногоТелефона = НомерМобильногоТелефона;
       НоваяСтрока.НомерДомашнегоТелефона = НомерДомашнегоТелефона;
       НоваяСтрока.КодАдресаПоФИАС = КодАдресаПоФИАС;
    
      // Переходим на следующую запись

       Если не ДБФ.Следующая() Тогда
          //Если записей больше нет выходим из цикла

           Прервать;
       КонецЕсли;
   КонецЦикла;
  
  // записываем последний добавленный

   Если НЕ (Док = Неопределено) Тогда
       Док.Записать();
   КонецЕсли;
    
КонецПроцедуры
   Табуретко
 
24 - 08.12.17 - 13:55
а значение полей с датами в дбф как выглядит?
   3achem
 
25 - 08.12.17 - 14:10
Да это жостко
   LuciferArh
 
26 - 08.12.17 - 14:11
Какая прэлэсть... Не код, а сказка... Две трети выкинуть можно смело.
   Mitka90
 
27 - 08.12.17 - 17:06
Всё, получилось! Я решил проблему путём удаления старой формы документа и создания новой.



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует