Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проверка сотрудников
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Змейкин
Народ вопрос) хочу сделать чтоб у меня обработка загрузки сотрудников из дбф файла работала.Например если попался сотрудник с одинаковым ИНН тогда чтобы она не создавала клона а дополняла уже существующий элемент справочника.Подскажите метод)
//********************************************************************************
******************
Перем Путь, ИмяФайла;
Перем ДБФ;
Функция ОткрытьБазу()
ДБФ = СоздатьОбъект("XBase");
Попытка
  ДБФ.ОткрытьФайл(Путь+ИмяФайла,,0);
Исключение
  Предупреждение("Ошибка отрытия файла " + Путь+ИмяФайла);
  Возврат 0;
КонецПопытки;
Если ДБФ.Открыта() = 0 Тогда
  Предупреждение("Ошибка отрытия файла " + Путь+ИмяФайла);
  Возврат 0;
КонецЕсли;

Возврат 1;
КонецФункции
//********************************************************************************
******************
Процедура Загрузить()                                                                  
Если ОткрытьБазу()=0 Тогда
     Возврат;
КонецЕсли;
    
ДБФ.КодоваяСтраница(1);
Сч=0;
СпрСотр=СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ИспользоватьДату(НачМесяца(ДатаВПериоде));
СпрРод=СоздатьОбъект("Справочник.Сотрудники");
;
// Цикл по записям ДБФ базы
Пока ДБФ.ВКонце()=0 Цикл

  тРодитель = ПолучитьПустоеЗначение("Справочник.Сотрудники");
  ЭтоГруппа = ДБФ.Group;
  КодРодителя = ДБФ.CodeR;
  
  Если КодРодителя<>0 Тогда
   Если СпрРод.НайтиПоКоду(КодРодителя,0)=1 Тогда                  
    тРодитель = СпрРод.ТекущийЭлемент();
    СпрСотр.ИспользоватьРодителя(тРодитель);
   Иначе
    Сообщить("Не найден родитель с кодом "+ КодРодителя);
   КонецЕсли;
  Иначе
   СпрСотр.ИспользоватьРодителя(тРодитель);
  КонецЕсли;

   Если СпрСотр.НайтиПоКоду(СокрЛП(ДБФ.Code),0)=0 Тогда
    Если ЭтоГруппа = 1 Тогда
     СпрСотр.НоваяГруппа();
     СпрСотр.Новый();              
     Сообщить("пошла запись")
   Иначе
    СпрСотр.Новый();
   КонецЕсли;
        текИНН = СокрЛП(ДБФ.INN);
  СпрСотр.Код =СокрЛП(ДБФ.Code);
  СпрСотр.Наименование= СокрЛП(ДБФ.Name0);

  Если ЭтоГруппа = 0 Тогда
   СпрСотр.Имя      = СокрЛП(ДБФ.Imya);    //Имя
   СпрСотр.Фамилия  = СокрЛП(ДБФ.Famil);   //Фамилия
   СпрСотр.Отчество = СокрЛП(ДБФ.Otch);    //Отчество

   СпрСотр.Адрес = СокрЛП(ДБФ.Adres);   //Адрес
   СпрСотр.Телефон = СокрЛП(ДБФ.Pfone);    //Телефон
   Если ДБФ.Sex="М" Тогда
    СпрСотр.Пол=Перечисление.Пол.М;
   ИначеЕсли ДБФ.Sex="Ж" Тогда
    СпрСотр.Пол=Перечисление.Пол.Ж;
   КонецЕсли;
      СпрСотр.Должность = СокрЛП(ДБФ.Dol);   //Должность
    
      СпрСотр.ДатаПриема = СокрЛП(ДБФ.Dat1);           //Дата приема
   СпрСотр.Оклад = СокрЛП(ДБФ.Okl);//Оклад
   СпрСотр.Аванс =СокрЛП(ДБФ.Av); //аванс
      //Паспортные данные
      СпрСотр.ПаспортСерия = СокрЛП(ДБФ.Ser);     //Серия
   СпрСотр.ПаспортНомер = СокрЛП(ДБФ.Nom);     //Номер

   СпрСотр.ИНН=СокрЛП(ДБФ.INN);
  КонецЕсли;
       КонецЕсли;
  СпрСотр.Записать();
        Сч=Сч+1;
  Сообщить(Строка(Сч)+"Добавлен элемент справочника - "+ДБФ.Name0+" ИНН: "+текИНН);
  ДБФ.Следующая();
КонецЦикла;
ДБФ.ЗакрытьФайл();
СпрСотр="";
СпрСотрР="";
Сообщить("Загрузка справочника закончена.");
КонецПроцедуры
//********************************************************************************
*******************
Процедура Выбрать()
Если (ФС.ВыбратьФайл(0,ИмяФайла,Путь,"Выбор файла загрузки","DBF файлы|*.DBF")=0) Тогда
  Путь="";
  Возврат;
КонецЕсли;
КонецПроцедуры
Путь=КаталогИБ();
ДатаЗаписи='01.12.2006';
Ardi
Метод "НайтиПоРеквизиту" объекта "Справочник".
igmig65
Если конфигурация бухучет, то нужно для реквизита ИНН спр.Сотрудники поставить флаг Сортировка, иначе НайтиПоРеквизиту() не сработает.
Если ЗиК, то справочник ФизЛица.
Змейкин
мне ж сначало нужно сравнить если есть уже этот реквизит и он ли одинаковый с ИНН с таблицы?Это мне сделать ти п реквизита числовым и сравнивать?
Домовик
ИспользоватьРодителя() метод прописывается только для элементов справочника непервого уровня. для первого - просто молчите, создавать пустоезначение не нужно.

НоваяГруппа() это не признак того, что элемент справочника группа. Это создание элемента-группы, новый() - создание элемента-негруппы. Не "С" , а "ВМЕСТО"

НайтиПоКоду(), НайтиПоРеквизиту() - не только для проверки условия, в первую очередь вы позиционируетесь на нужном элементе.
Домовик
Если КодРодителя<>0 Тогда
   Если СпрРод.НайтиПоКоду(КодРодителя,0)=1 Тогда                  
   // тРодитель = СпрРод.ТекущийЭлемент();
    СпрСотр.ИспользоватьРодителя(спрРод.ТекущийЭлемент());
   Иначе
    Сообщить("Не найден родитель с кодом "+ КодРодителя);
   КонецЕсли;
// Иначе
   //СпрСотр.ИспользоватьРодителя(тРодитель);  --- просто не используете метод, если родителя нет
  КонецЕсли;


Если СпрСотр.НайтиПоКоду(СокрЛП(ДБФ.Code),0)=0 Тогда
    Если ЭтоГруппа = 1 Тогда
    СпрСотр.НоваяГруппа();
//     СпрСотр.Новый();      --- это лишнее
        
    
   Иначе
    СпрСотр.Новый();
   КонецЕсли;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.