Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
23 Май 2017, 19:47
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Учимся програмировать - импорт из 2х дбф связанных меж собой по полю(ключу)  (Прочитано 749 раз)

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

Оффлайн metiloff

  • *
  • Сообщений: 44
  • РЕПУТАЦИЯ: 3
  • КПД: 7%
  • Регистрация: 2015-06-25
  • Сайт: 
  • Профессия: Ученик 1С
Добрый день! стаж программирования в 1с - 3 недели+ книжка Радченко.
Сам себе поставил задачу. Есть дбф файл Pasport.dbf  и вторая дбф Prihod.dbf
в первой клиенты фио адрес и тд. вторая содержит даты посещений и номер кабинета.
По отдельности импортнуть в справочник сведения я могу.
Пока НЕ ФайлDBF.ВКонце() Цикл
    Лс= Справочники.ЛС.СоздатьЭлемент();
Лс.Наименование = ФайлDBF.ПолучитьЗначениеПоля("FIO");
Лс.Код= ФайлDBF.ПолучитьЗначениеПоля("INDEX");

Лс.Записать();
//Сообщить(ФайлDBF.NAME_MED);
ФайлDBF.Следующая(); //передвигаем курсор далее

Как импортнуть вторую дбф чтоб привязались все его посещения к нужному человеку ?
пример индекс фио
       АА01   Иванов
       АА02   петров
Индекс2 индекс кабинет дата
001      АА01    2      14.05
002      АА01    3       16.06
003      АА02    2      01.01.2016
Подскажите  в какую сторону гуглить или какие статейки почитать на эту тему


Оффлайн LexaK

  • *****
  • Сообщений: 1209
  • РЕПУТАЦИЯ: 333
  • КПД: 28%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
вариантов великое множество, сам из ДБФ ни чего не грузил, поэтому кратко расскажу как это себе представляю,
вот одна схема
1. сначала грузите дбф таблицы - элементы, т.е. такие таблицы которые не ссылаются на другие, в вашем примере первый дбф
при его загрузке создаете Соответствие (во многих механизмах именно это как более универсальная) , можно структуру
пример Кода

...
лкДанные = Новый Соответствие;

(ваш цикл по чтению файла ДБФ1)

    (получение полей записи дбф1)
    ПолеИндекс = (Индекс из Дбф1);

    Объект1С = (создаете и заполняете данными из дбф1)
    Обект1С.Записать(); //можно поместить в попытку с анализом ошибки, если будет

    //помещаем созданный объект 1С в коллекцию со своим индексом
    лкДанные.Вставить(ПолеИндекс,Обект1С.Ссылка);

(КонецЦикла)


2. затем грузим таблицы дбф в которых есть ссылки на предыдущие таблицы, ваш пример таб.2


...
(ваш цикл по чтению файла ДБФ2)

    (получение полей записи дбф2)
    ПолеИндекс = (Индекс из Дбф2); //индекс который ссылается на дбф1

    Объект1С = (создаете и заполняете данными из дбф2)
    лкЭлемент = лкДанные.Получить(ПолеИндекс);
   
    //проверяем, есть ли занчение по данному индексу
   Если лкЭлемент = Неопределено Тогда
       Сообщить("Для индекса: " + ПолеИндекс + ", не загруженны исходные данные!")
   Иначе   
       Объект1С.(НужныйРеквизит) = лкЭлемент;
   КонецЕсли;

    Обект1С.Записать(); //можно поместить в попытку с анализом ошибки, если будет

(КонецЦикла)


понятное дело что при загрузке нескольких таблиц дбф, при необходимости надо создать несколько коллекций(соответствий) с данными
и использовать их для промежуточного хранения загружаемых объектов.
Такой механизм используется при конвертации/обмене данных между разными базами 1С.

но так же возможны и другие варианты загрузки,
все зависит от полета мысли программиста, если они(мысли) у него конечно есть. ;)

Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн metiloff

  • *
  • Сообщений: 44
  • РЕПУТАЦИЯ: 3
  • КПД: 7%
  • Регистрация: 2015-06-25
  • Сайт: 
  • Профессия: Ученик 1С
спасибо, завтра буду разбираться.
А вторую оформить табличной частью ?
Где то видел видео с обучением, там встают на фио контрагента а внизу в табличной части отображаются договора относящиеся к контрагенту. Вот у меня такая же задача отобразить у контрагента его посещения

Оффлайн sttt

  • *
  • Сообщений: 2
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2012-10-29
  • Сайт: 
  • Профессия: Программист 1С
Добрый день! стаж программирования в 1с - 3 недели+ книжка Радченко.
Сам себе поставил задачу. Есть дбф файл Pasport.dbf  и вторая дбф Prihod.dbf
в первой клиенты фио адрес и тд. вторая содержит даты посещений и номер кабинета.
По отдельности импортнуть в справочник сведения я могу.
Пока НЕ ФайлDBF.ВКонце() Цикл
    Лс= Справочники.ЛС.СоздатьЭлемент();
Лс.Наименование = ФайлDBF.ПолучитьЗначениеПоля("FIO");
Лс.Код= ФайлDBF.ПолучитьЗначениеПоля("INDEX");

Лс.Записать();
//Сообщить(ФайлDBF.NAME_MED);
ФайлDBF.Следующая(); //передвигаем курсор далее

Как импортнуть вторую дбф чтоб привязались все его посещения к нужному человеку ?
пример индекс фио
       АА01   Иванов
       АА02   петров
Индекс2 индекс кабинет дата
001      АА01    2      14.05
002      АА01    3       16.06
003      АА02    2      01.01.2016
Подскажите  в какую сторону гуглить или какие статейки почитать на эту тему

А еще лучше воспользоваться индексами самой дбф, без всей этой лабутены - типа соответствия...
Индексы позволят загружать и обрабатывать большие данные, без использования оперативной памяти, ее вечно не хватает...

ФайлНаДиске = Новый Файл(ИмяФайла);
Если НЕ(ФайлНаДиске.Существует()) Тогда
      Предупреждение("Файл с таким именем не существует " + ИмяФайла);
      Возврат;
КонецЕсли;

ДБФ = Новый xBase;
ДБФ.Кодировка  = КодировкаXBase.OEM;
ДБФ.ОткрытьФайл(ИмяФайла);
Если ДБФ.Открыта() = 0 Тогда
      Предупреждение("Неудалось открыть файл. Возможно он занят другим приложением!");
      Возврат;
КонецЕсли;
     
ДБФ.Индексы.Добавить("IDX_vE","VAL(EXTENSION)",Ложь,Ложь,"PREFLEN1>0");
ДБФ.СоздатьИндексныйФайл(ИмяИндекса);
ДБФ.ТекущийИндекс = ДБФ.Индексы.IDX_vE;


ДБФ.Ключ.EXTENSION = "1002";
Если ДБФ.НайтиПоКлючу("=") = Истина Тогда
      ТекЗапись=ДБФ.НомерЗаписи();
      Пока СокрЛП(ДБФ.EXTENSION) = "1002" Цикл
            Сообщить("-" + ДБФ.EXTENSION + " - " + ДБФ.НомерЗаписи() + "-");
            ДБФ.Следующая();
      КонецЦикла;
Иначе
      Сообщить("Ненайдено ниодной записи!");
КонецЕсли;

ДБФ.ЗакрытьФайл();
УдалитьФайлы(ИмяИндекса);

Последний раз редактировалось: sttt; 28 Май 2016, 12:48. Причина: добавил пример

Оффлайн metiloff

  • *
  • Сообщений: 44
  • РЕПУТАЦИЯ: 3
  • КПД: 7%
  • Регистрация: 2015-06-25
  • Сайт: 
  • Профессия: Ученик 1С


Теги:
 

Работа с несколькими валютами, Импорт прайсов от разных поставщиков в разных валютах

Автор ml_dirРаздел Пользователям "1С - Предприятие 8"

Ответов: 7
Просмотров: 4753
Последний ответ 05 Мар 2015, 23:33
от ClubViper
Сортировка журнала документа по полю "ВидДокумента"

Автор greenLissРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 4
Просмотров: 2410
Последний ответ 25 Июл 2014, 16:45
от greenLiss
Обращение к полю Свойства Номенклатуры в документе "возврат товара"

Автор Danil1988Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 508
Последний ответ 29 Фев 2016, 09:45
от Rasty
Импорт данных о товарах в 1с Упраление торг 11.1 через файл в формате CommerceML

Автор Евгений ОлеговичРаздел Пользователям "1С - Предприятие 8"

Ответов: 2
Просмотров: 862
Последний ответ 19 Ноя 2015, 10:11
от Евгений Олегович
Неправомерные доначисления таможни на импорт должны быть возвращены налогоплательщику

Автор newsРаздел Новости

Ответов: 0
Просмотров: 545
Последний ответ 07 Май 2014, 11:48
от news

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
96 Сообщений
Dethmontt Dethmontt
71 Сообщений
alex0402
69 Сообщений
MuI_I_Ika MuI_I_Ika
61 Сообщений
wise wise
50 Сообщений
Сергей Федоров Сергей Федоров
41 Сообщений
ilyay ilyay
39 Сообщений
BuhRust
22 Сообщений
ilnur75
21 Сообщений
videomause
20 Сообщений

* Кто онлайн

  • Точка Гостей: 376
  • Точка Скрытых: 0
  • Точка Пользователей: 9
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal