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

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

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

Оффлайн metiloff

  • **
  • Сообщений: 51
  • РЕПУТАЦИЯ: 3
  • КПД: 6%
  • Регистрация: 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

  • *****
  • Сообщений: 1246
  • РЕПУТАЦИЯ: 344
  • КПД: 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

  • **
  • Сообщений: 51
  • РЕПУТАЦИЯ: 3
  • КПД: 6%
  • Регистрация: 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

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


Теги:
 

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

* Реклама

* Поиск

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

* Реклама

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

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

alex0402
91 Сообщений
oleg-x
83 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
67 Сообщений
Golickoff Golickoff
51 Сообщений
ilyay ilyay
44 Сообщений
AIFrame
42 Сообщений
Амал
30 Сообщений
lansy
22 Сообщений
Dethmontt Dethmontt
22 Сообщений
wise wise
21 Сообщений

* Кто онлайн

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

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

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

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

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

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal