Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Ошибка при загрузке справочника: Код не уникален          
Змейкин Подменю пользователя
сообщение 07.07.13, 15:24
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 16
Спасибо сказали: 0 раз
Рейтинг: 0

Привет всем народ Проблема не могу загрузить из выгруженной таблицы справочник сотрудников
"Пишет код не уникален" Поля совпадают между выгрузкой и загрузкой совпадают а все равно не загружает с файла

Пример с кода
 Перем Путь, ИмяФайла;
Перем ДБФ;
Функция ОткрытьБазу()
ДБФ = СоздатьОбъект("XBase");
Попытка
  ДБФ.ОткрытьФайл(Путь+ИмяФайла,,0);
Исключение
  Предупреждение("Ошибка отрытия файла " + Путь+ИмяФайла);
  Возврат 0;
КонецПопытки;
Если ДБФ.Открыта() = 0 Тогда
  Предупреждение("Ошибка отрытия файла " + Путь+ИмяФайла);
  Возврат 0;
КонецЕсли;

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

  тРодитель = ПолучитьПустоеЗначение("Справочник.Сотрудники");
  ЭтоГруппа = ДБФ.Group;
  КодРодителя = ДБФ.CodeR;

  Если КодРодителя<>0 Тогда
   Если СпрРод.НайтиПоКоду(КодРодителя,0)=1 Тогда
    тРодитель = СпрРод.ТекущийЭлемент();
    СпрСотр.ИспользоватьРодителя(тРодитель);
   Иначе
    Сообщить("Не найден родитель с кодом "+ КодРодителя);
   КонецЕсли;
  Иначе
   СпрСотр.ИспользоватьРодителя(тРодитель);
  КонецЕсли;
  Если ПустоеЗначение(СпрСотр)=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';



 ! 

Правила: 4, 5!
 


Сообщение отредактировал Vofka - 07.07.13, 16:00

rpodgornyy Подменю пользователя
сообщение 07.07.13, 17:33
Сообщение #2

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 139
Из: Киев
Спасибо сказали: 14 раз
Рейтинг: 0

А поле код текстовое или числовое?

Спасибо сказали: Змейкин,

mister-x Подменю пользователя
сообщение 08.07.13, 12:04
Сообщение #3

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

ну так код не унікальний, отже, потрібно програмно формувати код

Спасибо сказали: Змейкин,

Sharzem Подменю пользователя
сообщение 13.07.13, 18:41
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 298
Спасибо сказали: 98 раз
Рейтинг: 99.1

Мне кажется что собака порыла именно в этом куске:
 Если КодРодителя<>0 Тогда
     Если СпрРод.НайтиПоКоду(КодРодителя,0)=1 Тогда
         тРодитель = СпрРод.ТекущийЭлемент();
         СпрСотр.ИспользоватьРодителя(тРодитель);
     Иначе
         Сообщить("Не найден родитель с кодом "+ КодРодителя);  
     КонецЕсли;
Иначе
     СпрСотр.ИспользоватьРодителя(тРодитель);// ЗДЕСЬ КАКОЙ тРодитель ? ОТКУДА ?
КонецЕсли;
// А ВОТ ЗДЕСЬ ВОПРОС: ПОЧЕМУ спрСотр ДОЛЖНО БЫТЬ НЕ ПУСТЫМ (ИЛИ ВЫБРАННЫМ)  ???
Если ПустоеЗначение(СпрСотр)=0 Тогда //ВЫ ЕГО ГДЕ ИСКАЛИ ТО ???
     СпрРод.Удалить();
     СпрСотр.Удалить();
Иначе
     Если ЭтоГруппа = 1 Тогда
         СпрСотр.НоваяГруппа();  
         СпрСотр.Новый();
     Иначе
         СпрСотр.Новый();
     КонецЕсли;
  
       текИНН = СокрЛП(ДБФ.INN);
       СпрСотр.Код =СокрЛП(ДБФ.Code); // А ЕСЛИ НЕ ИСКАЛИ ВОТ ВАМ И КОД НЕ УНИКАЛЬНЫЙ
       СпрСотр.Наименование= СокрЛП(ДБФ.Name0);


Signature
То, что для одного человека константа, для другого - переменная. (Алан.Дж.Перлис)

Спасибо сказали: Змейкин,

Змейкин Подменю пользователя
сообщение 13.07.13, 23:26
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 16
Спасибо сказали: 0 раз
Рейтинг: 0

Спасибо всем все уже получилось,да мне нужно было искать код и все заработало

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 10.06.24, 21:46
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!