1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

перенос данных из Dbf

Тема в разделе "Базы данных и администрирование", создана пользователем lira89, 30 мар 2010.

  1. lira89

    lira89 Well-Known Member

    Репутация:
    0
    Регистрация:
    12 мар 2010
    Сообщения:
    154
    Симпатии:
    0
    Код:
    //*******************************************
    Процедура Выполнить()
    ДатаОбр = РабочаяДата(); 
    ДБФ		= СоздатьОбъект("Xbase"); 
    
    Табл=СоздатьОбъект("ТаблицаЗначений");	
    Табл.НоваяКолонка("КодФак","Число",2,0,"Код факультета",7); 
    Табл.НоваяКолонка("КратНаимен","Строка",15,,"Краткое наименование",15); 
    Табл.НоваяКолонка("ПолноеНаимен","Строка",25,,"Полное наименование",25); 
    Табл.НоваяКолонка("КратНаименБел","Строка",15,,"Краткое наименование на белорусском языке",15); 
    Табл.НоваяКолонка("ПолноеНаименБел","Строка",25,,"Полное наименование на белорусском языке",25); 
    
    ИмяФайла="FACULTS.DBF";
    ИмяПути = СокрЛП(КаталогИБ())+"perenos\";
    ПутьДБ=ИмяПути + ИмяФайла;						 
    Если ФС.СуществуетФайл(ПутьДБ)=1 тогда	
    Сообщить("Файл существует");
    ДБФ.ОткрытьФайл(ПутьДБ);
    ДБФ.Первая();
    Пока ДБФ.ВКонце()=0 Цикл 
    Сообщить("Записываем в аблицу значений");
    Табл.НоваяСтрока();
    Табл.КодФак 	= ДБФ.ПолучитьЗначениеПоля(1); 
    Табл.КратНаимен	= ДБФ.ПолучитьЗначениеПоля(2);
    Табл.ПолноеНаимен	= ДБФ.ПолучитьЗначениеПоля(3);
    Табл.КратНаименБел	= ДБФ.ПолучитьЗначениеПоля(4);
    Табл.ПолноеНаименБел	= ДБФ.ПолучитьЗначениеПоля(5);
    ДБФ.Следующая();
    КонецЦикла;	
    КонецЕсли;		 
    ДБФ.ЗакрытьФайл();
    
    Табл.Сортировать("ПолноеНаимен"); 
    
    Ном1=0;
    Ном=0;
    СпрФакультеты = СоздатьОбъект("Справочник.Факультеты"); 
    СпрФакультеты.ИспользоватьДату(ДатаОбр);
    СпрФакультеты.ПорядокНаименований();
    СпрФакультеты.ВыбратьЭлементы();
    Пока СпрФакультеты.ПолучитьЭлемент() = 1 Цикл
    Если СпрФакультеты.ЭтоГруппа() = 1 Тогда
    Продолжить;
    КонецЕсли;
    
    Призн=0;
    Табл.ВыбратьСтроки();
    Пока Табл.ПолучитьСтроку() = 1 Цикл 
    Если ЗаноситьДанные=1 Тогда		 
    Сообщить("ЗаноситьДанные=1");
    СпрФакультеты.КодФак =		Табл.КодФак;  
    СпрФакультеты.КратНаимен =	Табл.КратНаимен;
    СпрФакультеты.ПолноеНаимен = Табл.ПолноеНаимен;
    СпрФакультеты.КратНаименБел = Табл.КратНаименБел;
    СпрФакультеты.ПолноеНаименБел = Табл.ПолноеНаименБел;
    Сообщить("Записали в справочник");		
    СпрФакультеты.Записать(); 
    Призн=1;
    КонецЕсли;	
    КонецЦикла;	
    Если Призн=0 Тогда  
    Ном1=Ном1+1;  
    Сообщить("Перешли на след номер");
    КонецЕсли;
    КонецЦикла;  
    
    КонецПроцедуры
    Не могу найти проблему: вроде бы все считывает из файла, но справочник остается пустым. Никаких ошибок не возникает. Реализация 7,7. Подскажите пожалуйста решение.
     
  2. kaa

    kaa Гость

    Репутация:
    0
    1. Посмотреть в отладчике заполняется Табл или нет
    2. А есть ли в справочнике СпрФакультеты элементы ибо если нет то в цикл и не заходит
    3. А не может ли быть что ЗаноситьДанные всегда равно 0
     
  3. Chemist

    Chemist Гость

    Репутация:
    0
    А где создание нового элемента справочника?

    После:
    Если ЗаноситьДанные=1 Тогда

    Ставишь:
    СпрФакультеты.Новый();
     
  4. nikakoy

    nikakoy New Member

    Репутация:
    0
    Регистрация:
    1 дек 2008
    Сообщения:
    2
    Симпатии:
    0
    сам смысл кода...
    перебор элементов справочника и перезапись каждого из них по всем строкам таблицы... если элементы есть, то у каждого значения из последней строки таблицы....
    о_О
    или я чего то не понимаю???
     
  5. vbs

    vbs Well-Known Member

    Репутация:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Если есть желание переписать элементы справочника, написано неправильно, если добавить новые, то тоже неправильно
     
  6. TimeDontWait

    TimeDontWait Well-Known Member

    Репутация:
    0
    Регистрация:
    4 янв 2010
    Сообщения:
    367
    Симпатии:
    0
    Ето зачем ?
    Для записи используй в цикле
    Код:
    СпрФакультеты.Новый();
    СпрФакультеты.использоватьДату(НекаяДата);
     
  7. lira89

    lira89 Well-Known Member

    Репутация:
    0
    Регистрация:
    12 мар 2010
    Сообщения:
    154
    Симпатии:
    0
    Спасибо всем, я учла все замечания и все заработало :ya_lamo:
    Однако у меня появился еще один вопрос насчет подчиненного справочника. При загрузке из dbf двух справочников (один из них подчиненный) в отладчике все проходит отлично, однако в базе подчиненный справочник, после выбора соответствующего элемента из главного справочника, остается пустым. Я плохо ориентируюсь с методами справочников, которые определяют владельцев и т .п., возможно кто-нибудь поможет исправить этот недочет. В конфигураторе в справочниках установлена связка подчиненности. Ниже код, все таже реализация 7.7. Модуль выполнен в обработке. Заранее благодарна
    Код:
    Процедура Выполнить()
    ДатаОбр = РабочаяДата(); 
    ДБФ		= СоздатьОбъект("Xbase"); 
    Табл=СоздатьОбъект("ТаблицаЗначений");	
    Табл.НоваяКолонка("КодФак","Строка",2,0,"Код факультета",7); 
    Табл.НоваяКолонка("КратНаимен","Строка",15,,"Краткое наименование",15); 
    Табл.НоваяКолонка("Наименование","Строка",25,,"Полное наименование",25); 
    Табл.НоваяКолонка("КратНаименБел","Строка",15,,"Краткое наименование на белорусском языке",15); 
    Табл.НоваяКолонка("ПолноеНаименБел","Строка",25,,"Полное наименование на белорусском языке",25); 
    ИмяФайла="FACULTS.DBF";  
    ИмяПути = СокрЛП(КаталогИБ())+"perenos\";
    ПутьДБ=ИмяПути + ИмяФайла;						 
    Если ФС.СуществуетФайл(ПутьДБ)=1 тогда	
    Сообщить("Файл существует");
    ДБФ.ОткрытьФайл(ПутьДБ);
    ДБФ.Первая();
    Пока ДБФ.ВКонце()=0 Цикл 
    Сообщить("Записываем в таблицу значений");
    Табл.НоваяСтрока();
    Табл.КодФак 	=СокрЛП(ДБФ.ПолучитьЗначениеПоля(1)); 
    Табл.КратНаимен	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(2));
    Табл.Наименование	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(3));
    Табл.КратНаименБел	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(4));
    Табл.ПолноеНаименБел	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(5));
    ДБФ.Следующая();
    КонецЦикла;	
    //Табл.Сортировать("Наименование"); 
    Таб=СоздатьОбъект("Таблица"); 
    Таб.ВывестиСекцию("Шапка");
    Ном=0;
    СпрФакультеты = СоздатьОбъект("Справочник.Факультеты"); // справочник владелец
    //СпрФакультеты.ПорядокНаименований();
    Табл.ВыбратьСтроки();
    Пока Табл.ПолучитьСтроку() > 0 Цикл	
    Если СпрФакультеты.НайтиПоРеквизиту("КодФак",Табл.КодФак,1)=1 тогда 
    Сообщить("Запись факультета"""+Табл.Наименование+""" с кодом"""+Табл.КодФак+""" уже существует.");
    Продолжить;	 
    Иначе
    Сообщить("ЗаноситьДанные");
    СпрФакультеты.Новый(); 
    СпрФакультеты.ИспользоватьДату(ДатаОбр);
    СпрФакультеты.КодФак =СокрЛП(Табл.КодФак);  
    СпрФакультеты.КратНаимен =	СокрЛП(Табл.КратНаимен);
    СпрФакультеты.Наименование = СокрЛП(Табл.Наименование);
    СпрФакультеты.КратНаименБел = СокрЛП(Табл.КратНаименБел);
    СпрФакультеты.ПолноеНаименБел = СокрЛП(Табл.ПолноеНаименБел);
    Ном=Ном+1; 
    Сообщить("Записали в справочник");		
    СпрФакультеты.Записать();	 
    
    Таб.ВывестиСекцию("Факультеты"); 
    КонецЕсли;	
    КонецЦикла;	
    //  Таб.Показать();
    Иначе 
    Сообщить ("Файла с факультетами в папке """+ИмяПути +""" не существует!!!");
    СтатусВозврата(0);
    КонецЕсли;		
    ДБФ.ЗакрытьФайл();
    /////////ДОБАВЛЕНИЕ ЗАПИСЕЙ В СПРАВОЧНИК "ГРУППЫ" (подчиненный справочник )
    ДБФ1		= СоздатьОбъект("Xbase"); 
    Табл1=СоздатьОбъект("ТаблицаЗначений");	
    Табл1.НоваяКолонка("КодГруппы","Строка",5,0,"Код группы",7); 
    Табл1.НоваяКолонка("ФормаОбучения","Строка",1,,"Формы обучения",5); 
    Табл1.НоваяКолонка("КодКвалификации","Строка",3,,"Код квалификации",5); 
    Табл1.НоваяКолонка("ГодГруппы","Число",4,,"Год группы",5); 
    Табл1.НоваяКолонка("Наименование","Строка",10,,"Наименование группы",10); 
    Табл1.НоваяКолонка("ЧислоСтудентов","Число",2,,"Число студентов в группе",3); 
    Табл1.НоваяКолонка("ФамСтаросты","Строка",25,,"Фамилия и инициалы старосты",25); 
    Табл1.НоваяКолонка("КодФакультета","Строка",2,0,"Код факультета",7); 
    ИмяФайла="УчГруппы.DBF";
    ИмяПути = СокрЛП(КаталогИБ())+"perenos\";
    ПутьДБ=ИмяПути + ИмяФайла;						 
    Если ФС.СуществуетФайл(ПутьДБ)=1 тогда	
    Сообщить("Файл существует");
    ДБФ.ОткрытьФайл(ПутьДБ);
    ДБФ.Первая();
    Пока ДБФ.ВКонце()=0 Цикл 
    Сообщить("Записываем в таблицу значений учебную группу"); 
    Табл1.НоваяСтрока();
    Табл1.КодГруппы 	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(1)); 
    Табл1.ФормаОбучения	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(2));
    Табл1.КодКвалификации	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(3));
    Табл1.ГодГруппы	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(4));
    Табл1.Наименование	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(5)); 
    Табл1.ЧислоСтудентов	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(6)); 
    Табл1.ФамСтаросты	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(7)); 
    Табл1.КодФакультета	= СокрЛП(ДБФ.ПолучитьЗначениеПоля(8)); 
    ДБФ.Следующая();
    КонецЦикла;	
    Ном1=0;
    СпрУчебГруппы = СоздатьОбъект("Справочник.Группы"); 
    //			 СпрУчебГруппы.Родитель(СпрФакультеты);
    СпрФакультеты.ВыбратьЭлементы();
    Пока СпрФакультеты.ПолучитьЭлемент()=1 Цикл
    СпрУчебГруппы.ИспользоватьВладельца(СпрФакультеты.ТекущийЭлемент());
    Табл1.ВыбратьСтроки();
    Пока Табл1.ПолучитьСтроку() > 0 Цикл	 
    Если СпрФакультеты.КодФак = Табл1.КодФакультета тогда 
    Если СпрУчебГруппы.НайтиПоРеквизиту("КодГруппы",Табл1.КодГруппы,0)=1 тогда 
    Сообщить("Запись группы"""+Табл1.Наименование+""" с кодом"""+Табл1.КодГруппы+""" уже существует.");
    Продолжить;	 
    Иначе
    Сообщить("ЗаноситьДанные учебных групп");
    СпрУчебГруппы.Новый(); 
    //	СпрУчебГруппы.Владелец = СпрФакультеты.ТекущийЭлемент();
    СпрУчебГруппы.ИспользоватьДату(ДатаОбр); 
    СпрУчебГруппы.КодГруппы =Табл1.КодГруппы;  
    СпрУчебГруппы.ФормаОбучения =Табл1.ФормаОбучения;
    СпрУчебГруппы.Квалификация = Табл1.КодКвалификации;
    СпрУчебГруппы.ГодНачала = Табл1.ГодГруппы;
    СпрУчебГруппы.Наименование = Табл1.Наименование;  
    СпрУчебГруппы.ЧислоСтудентов = Табл1.ЧислоСтудентов;
    СпрУчебГруппы.Староста = Табл1.ФамСтаросты;  
    СпрУчебГруппы.КодФакультета = Табл1.КодФакультета; 
    Ном1=Ном1+1; 
    Сообщить("Записали в справочник учебную группу");		
    СпрФакультеты.Записать(); 
    Таб.ВывестиСекцию("Группы");	 
    КонецЕсли;	 
    КонецЕсли; 
    КонецЦикла;
    КонецЦикла;	
    Иначе 
    Сообщить ("Файла УчебныеГруппы в папке """+ИмяПути +""" не существует!!!");
    СтатусВозврата(0);
    КонецЕсли;		
    ДБФ1.ЗакрытьФайл();	
    Таб.Показать();					
    
    КонецПроцедуры
     
  8. vbs

    vbs Well-Known Member

    Репутация:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Весь код сотри, оставь только то, что вызывает сомнения или вопросы. Никому не интересно читать сотню бессмысленных строк
     
  9. TimeDontWait

    TimeDontWait Well-Known Member

    Репутация:
    0
    Регистрация:
    4 янв 2010
    Сообщения:
    367
    Симпатии:
    0
    Убери коментарий
    ИспользоватьВладельца() - для поиска, выборки, перебора
    Владелец - для записи
    И почему
    Ты ведь записываеш в справочник СпрУчебГруппы...
     
  10. kazak85

    kazak85 Гость

    Репутация:
    0
    а есть у кого нить пример переноса из dbf только для 8 версии???
     
  11. vitfil

    vitfil IT-интегратор

    Репутация:
    0
    Регистрация:
    2 апр 2004
    Сообщения:
    2.062
    Симпатии:
    0
    kazak85, а какие у вас возникли проблемы?
     
  12. unknown181538

    unknown181538 НеГуру

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.417
    Симпатии:
    0
    Вместо
    СпрУчебГруппы.ЗАписать();
     
  13. Дайнеко

    Дайнеко Well-Known Member

    Репутация:
    0
    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Смотрел тему. Хотел принять участие. Глянул по диагонали тексты. Расхотел.

    lira89! Хорошая Вы девочка, любознательная такая, спрашиваете так активно. Но уж скажу прямо, глядя на тему: это то, что называется "нагружаете".
    Влоб начинаете с текста модуля, что правила не рекомендуют. А чтоб мало не показалось, получите ишчо на 2 листа.
    Вам пишут: "Весь код сотри, оставь только то, что вызывает сомнения или вопросы. Никому не интересно читать сотню бессмысленных строк".
    Получается, что Вы не совета просите, а просите поковыряться вместо себя. Да, бывает, что проблема в программе не находится. Тогда подайте обществу вопрос компактно и красиво.

    Примите мое ворчание как пожелание успешной работы.
     
  14. unknown181538

    unknown181538 НеГуру

    Репутация:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    1.417
    Симпатии:
    0
    kazak85
    Есть конечно. Но он и в СП есть.
     

    Вложения:

    • DBF.rar
      Размер файла:
      24,2 КБ
      Просмотров:
      8
  15. kazak85

    kazak85 Гость

    Репутация:
    0
    у меня получаеться dbf с кучей колонок из которых надо выбрать 4 и перенести их в справочник контрагенты
     
  16. vbs

    vbs Well-Known Member

    Репутация:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Я бы повторил еще раз : так в чем все же проблема ?
     
  17. kazak85

    kazak85 Гость

    Репутация:
    0
    у меня записывает только 1 элемент таблицы, а остальные просто опускает
     
  18. vbs

    vbs Well-Known Member

    Репутация:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Странный человек :)
    Неужели ты думаешь, что такое описание достаточно, чтобы дать дельный совет ?
     
  19. lira89

    lira89 Well-Known Member

    Репутация:
    0
    Регистрация:
    12 мар 2010
    Сообщения:
    154
    Симпатии:
    0
    Спасибо за замечание. Просто с моим очень маленьким опытом сложно было выделить какую-то определенную часть (особенно когда точно не знаешь где ошибка). В следующий раз буду внимательнее и не буду так "нагружать" :) , сама понимаю, что рыться в большом коде (да еще и в чужом) не очень хочется :) .
    И спасибо всем за советы и замечания, очень помогают ;) .
     
  20. vbs

    vbs Well-Known Member

    Репутация:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Использование отладчика весьма способствует локализации проблемы :rolleyes:
     
Загрузка...

Поделиться этой страницей