7.7 Вопрос По загрузке)

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

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

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

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Народ вопрос) хочу сделать чтоб у меня обработка загрузки сотрудников из дбф файла работала.Например если попался сотрудник с одинаковым ИНН тогда чтобы она не создавала клона а дополняла уже существующий элемент справочника.
    Код:
    //**************************************************************************************************
    Перем Путь, ИмяФайла;
    Перем ДБФ;
    Функция ОткрытьБазу()
    ДБФ = СоздатьОбъект("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';
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Код:
     
    Если СпрСотр.НайтиПоРеквизиту(ИНН,ДБФ.INN,1)=0 Тогда
    Если СпрСотр.НайтиПоКоду(СокрЛП(ДБФ.Code),0)=0 Тогда
    Если ЭтоГруппа = 1 Тогда
    СпрСотр.НоваяГруппа();
    СпрСотр.Новый();			 
    Сообщить("пошла запись")
    Иначе
    СпрСотр.Новый();
    КонецЕсли;
    КонецЕсли;
    
    У реквизита д.б. установлен признак "отбор по реквизиту"
  3. TopicStarter Overlay
    змейкин
    Offline

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

    Регистрация:
    25 мар 2013
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Пишет переменная ИНН неопередлена отбор по реквизиту стоит,реквизит одинаков
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Извиняюсь.. Ошибся
    Код:
    Если СпрСотр.НайтиПоРеквизиту("ИНН",ДБФ.INN,1)=0 Тогда
    
    З/Ы.. Понемногу начинаем "включать голову". Смотрим методы и их описание в СП. А то ничему не научитесь самостоятельно.
  5. TopicStarter Overlay
    змейкин
    Offline

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

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

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