7.7 x-base Выгрузка сотрудников в файл дбф

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем змейкин, 20 июн 2013.

  1. TopicStarter Overlay
    змейкин
    Offline

    змейкин Опытный в 1С

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Помогите)не видит Xbase Пишет: "Поле агрегатного объекта не обнаружено (Name)"
    чтоя делаю не так(
    Код:
    Перем Путь, ИмяФайла;
    Перем ДБФ;
    Функция ОткрытьБазу()
    ДБФ = СоздатьОбъект("XBase");
    Попытка
    ДБФ.ОткрытьФайл(Путь+ИмяФайла,,0);
    Исключение
    Предупреждение("Ошибка отрытия файла " + Путь+ИмяФайла);
    Возврат 0;
    КонецПопытки;
    Если ДБФ.Открыта() = 0 Тогда
    Предупреждение("Ошибка отрытия файла " + Путь+ИмяФайла);
    Возврат 0;
    КонецЕсли;
    
    Возврат 1;
    КонецФункции
    Процедура УстановитьДату(ТЭлемент)
    
    СпрСотр2=СоздатьОбъект("Справочник.Сотрудники");
    Если СпрСотр2.НайтиЭлемент(ТЭлемент)>0 Тогда
    СпрСотр2.ПризнакИзмененияДоходаДляИндексации.Установить(ДБФ.DatZ,1);
    Сообщить("Установлен признак изменения дохода.");
    Иначе
    Сообщить("Не найден элемент "+ТЭлемент);
    КонецЕсли;
    КонецПроцедуры
    Процедура Загрузить()
    ОткрытьБазу();
    Если ОткрытьБазу()=0 Тогда
    Возврат;
    КонецЕсли;
    
    ДБФ.КодоваяСтраница(0);
    Сч=0;
    СпрСотр=СоздатьОбъект("Справочник.Сотрудники");
    СпрСотр.ИспользоватьДату(НачМесяца(ДатаВПериоде));
    // Цикл по записям ДБФ базы
    Пока ДБФ.ВКонце()=0 Цикл
    
    //текИНН = СокрЛП(ДБФ.INN);
    //текДатаУвольнения = ДБФ.Data2;
    
    СпрСотр.ИспользоватьРодителя(ПолучитьПустоеЗначение("Справочник.Сотрудники"));
    
    СпрСотр.Новый();
    СпрСотр.Код =СокрЛП(ДБФ.Code);
    СпрСотр.Наименование= СокрЛП(ДБФ.Name);
    
    СпрСотр.Имя	  = СокрЛП(ДБФ.Imya);    //Имя
    СпрСотр.Фамилия  = СокрЛП(ДБФ.Famil);   //Фамилия
    СпрСотр.Отчество = СокрЛП(ДБФ.Otch);    //Отчество
    
    СпрСотр.Адрес = СокрЛП(ДБФ.Adres);   //Адрес
    СпрСотр.Телефон = СокрЛП(ДБФ.Pfone);    //Телефон
    Если ДБФ.Sex="М" Тогда
    СпрСотр.Пол=Перечисление.Пол.Мужской;
    ИначеЕсли ДБФ.Sex="Ж" Тогда
    СпрСотр.Пол=Перечисление.Пол.Женский;
    КонецЕсли;
    //СпрСотр.Фирма=НашаФирма;
    СпрСотр.Должность = СокрЛП(ДБФ.Dol);   //Должность
    
    СпрСотр.ДатаПриема = ДБФ.Data1;		   //Дата приема
    Если ПустоеЗначение(ДБФ.Data2)=0 Тогда    //Дата увольнения
    СпрСотр.ДатаУвольнения = ДБФ.Data2;
    КонецЕсли;
    Если ДБФ.Tip=0 Тогда
    СпрСотр.ТипСотрудника = 1;		   //Основной
    ИначеЕсли ДБФ.Tip=1 Тогда
    СпрСотр.ТипСотрудника = 0;		   //Совместитель
    КонецЕсли;
    
    СпрСотр.Оклад = ДБФ.Okl;				 //Оклад
    
    СпрСотр.КвоЛьгот = ДБФ.KLgot;		    //Кво льгот
    
    //СпрСотр.ЧленПрофсоюза = 1;	    //Профсоюз
    
    //Паспортные данные
    СпрСотр.ПаспортСерия = СокрЛП(ДБФ.Ser);	 //Серия
    СпрСотр.ПаспортНомер = СокрЛП(ДБФ.Nom);	 //Номер
    СпрСотр.ВыданДата = СокрЛП(ДБФ.DatPas);  //Дата выдачи
    СпрСотр.ВыданКем = СокрЛП(ДБФ.Vydan);	 //Кем выдан
    СпрСотр.ИНН=СокрЛП(ДБФ.INN);
    СпрСотр.Записать();
    Сч=Сч+1;
    //Сообщить(Строка(Сч)+"Добавлен элемент справочника - "+ДБФ.Name+" ИНН: "+текИНН);
    УстановитьДату(СпрСотр.ТекущийЭлемент());
    
    ДБФ.Следующая();
    КонецЦикла;
    ДБФ.ЗакрытьФайл();
    СпрСотр="";
    СпрСотрР="";
    Сообщить("Загрузка справочника закончена.");
    КонецПроцедуры
    Процедура Выбрать()
    Если (ФС.ВыбратьФайл(0,ИмяФайла,Путь,"Выбор файла загрузки","DBF файлы|*.DBF")=0) Тогда
    Путь="";
    Возврат;
    КонецЕсли;
    КонецПроцедуры
    Путь=КаталогИБ();
    ДатаЗаписи='01.12.2006';
    
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    А такое поле точно есть? Попробуйте так:
    Код:
    ДБФ.ПолучитьЗначениеПоля("Name")
  3. TopicStarter Overlay
    змейкин
    Offline

    змейкин Опытный в 1С

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    ЭтоЗагрузка справочника Сотрудника

    ага ща попробую
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    видно по коду))) Проверьте структуру DBF файла
  5. TopicStarter Overlay
    змейкин
    Offline

    змейкин Опытный в 1С

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Перед выполнением операции установите объект на запись! вот что написал
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Код:
    СпрСотр.Наименование=СокрЛП(ДБФ.ПолучитьЗначениеПоля("Name"))
    В этом месте написал?
  7. TopicStarter Overlay
    змейкин
    Offline

    змейкин Опытный в 1С

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    да конечно

    вот сделал еще выгрузку обработку которая создает файл таблицы с этими полями вот:
    Код:
    Перем Путь, ИмяФайла;
    Процедура ВыбратьПутьИмя()
    
    Если ФС.ВыбратьФайл(1, ИмяФайла, Путь, "Укажите имя DBF-файла (Запасы.DBF)","Файлы ДБФ (*.dbf)","dbf") <> 1 Тогда
    Возврат
    КонецЕсли;
    
    КонецПроцедуры
    //*******************************************
    Процедура Выгрузить()
    
    Попытка				 
    Если ФС.СуществуетФайл(Путь+"\"+ИмяФайла) = 1 Тогда
    ФС.УдалитьФайл(Путь+"\"+ИмяФайла);	  
    КонецЕсли;
    Исключение
    Сообщить("Невозможно перезаписать файл с предыдущей выгрузкой.","!!!");
    Возврат ;
    КонецПопытки;
    ДБФ=СоздатьОбъект("XBase");
    
    // Определяем поля
    ДБФ.ДобавитьПоле("Code","S", 10,);
    ДБФ.ДобавитьПоле("Name","S",30,);
    ДБФ.ДобавитьПоле("Imya","S",20,);    //Имя
    ДБФ.ДобавитьПоле("Famil","S",25,);   //Фамилия
    ДБФ.ДобавитьПоле("Otch","S",20,);    //Отчество
    ДБФ.ДобавитьПоле("Adres","S",100,);   //Адрес
    ДБФ.ДобавитьПоле("Pfone","S",32,);   //Телефон
    ДБФ.ДобавитьПоле("Sex","S",1,);	  //Пол
    ДБФ.ДобавитьПоле("Dol","S",25,);   //Должность
    ДБФ.ДобавитьПоле("Dat1","D",8,);    //Дата приема
    ДБФ.ДобавитьПоле("Okl","N",12,2);    //Оклад
    ДБФ.ДобавитьПоле("Av", "N",12,2);	 //Аванс
    ДБФ.ДобавитьПоле("Ser","S",12,2);
    ДБФ.ДобавитьПоле("Nom","S",12,2);
    ДБФ.ДобавитьПоле("Inv", "N",1,0);	 //Инвалид
    ДБФ.ДобавитьПоле("INN","S",10,);	  
    Попытка
    ДБФ.СоздатьФайл(Путь+"\"+ИмяФайла);
    Исключение
    Предупреждение("Ошибка создания файла " + Путь+"\"+ИмяФайла);
    Возврат;
    КонецПопытки;
    Если ДБФ.Открыта() = 0 Тогда
    Предупреждение("Ошибка открытия файла " + Путь+"\"+ИмяФайла);
    Возврат;
    КонецЕсли;
    Сч=0;
    СпрСотры=СоздатьОбъект("Справочник.Сотрудники");
    //ДБФ.КодоваяСтраница(0);
    СпрСотры.ИспользоватьДату(ДатаВыборки);
    СпрСотры.ВыбратьЭлементы();
    Пока СпрСотры.ПолучитьЭлемент() > 0 Цикл
    Если СпрСотры.ПометкаУдаления()=1 Тогда
    Продолжить;   
    КонецЕсли;
    
    Если ПустоеЗначение(СпрСотры.ДатаПриема)=1 Тогда
    Продолжить;
    КонецЕсли;
    Если ПустоеЗначение(СпрСотры.ДатаУвольнения)=0 Тогда
    Если СпрСотры.ДатаУвольнения<'01.01.2007' Тогда
    Продолжить;
    КонецЕсли;
    КонецЕсли;
    
    ДБФ.Добавить();
    ДБФ.Code  = СпрСотры.Код;
    ДБФ.Name  = СпрСотры.Наименование;
    ДБФ.Famil = СпрСотры.Фамилия;		 //Фамилия
    ДБФ.Imya  = СпрСотры.Имя;		 //Имя
    ДБФ.Otch  = СпрСотры.Отчество;		 //Отчество
    
    ДБФ.Adres = СпрСотры.Адрес;						 //Адрес
    ДБФ.Pfone = СпрСотры.Телефон;					   //Телефон
    ДБФ.Sex   = СпрСотры.Пол.Идентификатор();				   //Пол
    //ДБФ.Podr  = СпрСотры.Подразделение.Наименование;	   //Подразделение
    ДБФ.Dol   = СпрСотры.Должность;//Должность
    ДБФ.Inv  =  СпрСотры.фЭтоИнвалид;
    
    ДБФ.Dat1  = СпрСотры.ДатаПриема;				 //Дата приема
    //ДБФ.Tip   = Совмещ;									  //Совместительство
    
    ДБФ.Okl   = СпрСотры.Оклад;									   //Оклад
    ДБФ.Av    = СпрСотры.Аванс;
    //Паспортные данные
    ДБФ.Ser   = СпрСотры.ПаспортСерия;	   //Серия
    ДБФ.Nom   = СпрСотры.ПаспортНомер;	   //Номер
    ДБФ.INN   = СпрСотры.ИНН;			  //Строка 10
    Попытка
    ДБФ.Записать();
    Сч=Сч+1;
    Сообщить("Добавлена запись №" + Строка(Сч));
    Исключение
    Предупреждение("Ошибка записи!");
    Возврат ;
    КонецПопытки;
    
    КонецЦикла;
    ДБФ.ЗакрытьФайл();
    Предупреждение("Выгрузка закончена!");
    
    КонецПроцедуры
    Процедура ПриОткрытии()
    
    Путь=КаталогИБ()+"\ExtForms";
    ИмяФайла="Сотрики.DBF";
    ДатаВыборки= '31.12.2006';
    
    КонецПроцедуры
    
    Загрузка плучаеться но не перезаписываеться ничего(
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Обратите внимание
    Код:
    СпрСотр.Код =СокрЛП(ДБФ.Code); //тут работате
    СпрСотр.Наименование= СокрЛП(ДБФ.Name); //тут не работает
    
    Вывод? Проверяйте написание имени
  9. TopicStarter Overlay
    змейкин
    Offline

    змейкин Опытный в 1С

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    с именем разобрался)только теперь все проходит нормлаьно только ничего не записывает в файл
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    т.е. выгрузка не происходит? По коду вроде бы все верно. М.б. файл, в который вы выгружаете в этот момент открыт в базе в которую вы грузите?
  11. TopicStarter Overlay
    змейкин
    Offline

    змейкин Опытный в 1С

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Выгрузку делаю Файл перезаписывается добавляются новые колонки мои а вот значения справочника не добавляются
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    единственный вариант - условия в цикле не корректны. Т.е. что-то у вас с реквизитами приема/увольнения не так... М.б. реквизиты периодические?
    Пройдитесь отладчиком
  13. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    412
    Симпатии:
    72
    Баллы:
    54
    Здравствуйте.
    Не вижу в вашем коде проверку на присутствие в справочнике элемента с таким же кодом. Вы по каждой дбф-записи пытаетесь создать новый. Справочник перед загрузкой пустой?
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Предполагаю что перенос одноразовый.. Не обмен.
    Проще было бы вообще в КД правила набросать и не мучиться.
  15. TopicStarter Overlay
    змейкин
    Offline

    змейкин Опытный в 1С

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    да хотеелось бы обраотку написать себе для выгрузки загрузки сотрудников чтоб всегда с собой были
  16. TopicStarter Overlay
    змейкин
    Offline

    змейкин Опытный в 1С

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Справочник перед загрузкой нет заполнен но мне бы пока с выгрузкой разобраться(

    отладчик ничего не показывает только "Ошибка выражения"
  17. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Только при условии что конфигурации совпадают... Иначе - каждый раз поправлять. Хотя... если в качестве шаблона, то да

    ваш пост №9... Вы же сказали что все ок.. Или уже другая ошибка?
  18. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    412
    Симпатии:
    72
    Баллы:
    54
    Я взяла ваш код и попробовала выгрузить. С небольшими правками наименования реквизитов справочника у меня выгрузка работает. Попробуйте выгружать хотя бы только код и наименование.
  19. TopicStarter Overlay
    змейкин
    Offline

    змейкин Опытный в 1С

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Все затер пробуют только код и наименование не получается
    Код:
     ДБФ=СоздатьОбъект("XBase");
    
    // Определяем поля
    ДБФ.ДобавитьПоле("Code","S", 10,);
    ДБФ.ДобавитьПоле("Name","S",30,);
    ДБФ.Добавить();
    ДБФ.Code  = СпрСотры.Код;
    ДБФ.Name  = СпрСотры.Наименование;
    
  20. TopicStarter Overlay
    змейкин
    Offline

    змейкин Опытный в 1С

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Пишет ошибку

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