Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
06 июл 2022, 20:03

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

Автор Mitka90, 08 дек 2017, 09:15

0 Пользователей и 1 гость просматривают эту тему.

Mitka90

Здравствуйте!

Возник вопрос: как можно в данном случае вывести данные из 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 = Документ Тогда

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

pavl_vs

Цитата: Mitka90 от 08 дек 2017, 09:15
Возник вопрос: как можно в данном случае вывести данные из DBF-файла в одну табличную часть одного документа?
Как? - вынести создание документа "Док" из цикла по строкам.

Mitka90

Получилось вот так. Но ещё не выводятся в табличные части дата заключения договора и дата выдачи договора.
В чём может быть проблема?


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

  //Определим путь файла загрузки


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

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

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

   ДБФ = Новый XBase;

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

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

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

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

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

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

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

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

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

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

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

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

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

Kironten

Приведите их к типу в табличной части.
Скорее всего в ДБФ их тип строка, а в тч - дата.

Mitka90

Спасибо, получилось! Я решил проблему путём удаления старой формы документа и создания новой.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск