Имя: Пароль:
1C
1С v8
Загрузка в табличную часть документа данных из DBF-файла
,
0 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
Продолжайте наблюдение
2 igorPetrov
 
07.12.17
09:02
(0) Здравствуйте!
Если нужно, выводите.
3 shadow_sw
 
07.12.17
09:13
франчайзи набрали опять студентов? куча тем с глупыми вопросами
(0) пользуемся поиском, все разжевано сто раз
4 Mitka90
 
07.12.17
09:14
Я вообще-то по существу спрашиваю: как можно осуществить вывод данных в табличную часть документа из DBF-файла?

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

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

Документ = Неопределено;
21 Табуретко
 
08.12.17
10:15
(0) позовите специалиста...
22 LuciferArh
 
08.12.17
10:20
(21) Специалист денег попросит.
23 Mitka90
 
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
а значение полей с датами в дбф как выглядит?
25 3achem
 
08.12.17
14:10
Да это жостко
26 LuciferArh
 
08.12.17
14:11
Какая прэлэсть... Не код, а сказка... Две трети выкинуть можно смело.
27 Mitka90
 
08.12.17
17:06
Всё, получилось! Я решил проблему путём удаления старой формы документа и создания новой.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан