Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 апр 2024, 23:21

Загрузка из xml в 1c справочник

Автор edzie, 31 мар 2013, 21:45

0 Пользователей и 1 гость просматривают эту тему.

edzie

Здравствуйте, я в 1с не силен, как сделать чтобы из xml файла записи организации и сотрудники заменяли прошлые записи которые были в справочнике? есть код где старые записи удаляются, но мне надо чтобы они записывались поверх старых.
&НаСервере
Процедура ЗагрузитьXML(файл)
   НовыйОбъектОрганизации = NULL;
   НовыйОбъектСотрудника = NULL;
   Справочник_Организации = Справочники.Организации;
   Справочник_Сотрудники = Справочники.Сотрудники;
   
   ВыборкаИзСотрудников = Справочники.Сотрудники.Выбрать();
   Пока ВыборкаИзСотрудников.Следующий() Цикл
      del = ВыборкаИзСотрудников.ПолучитьОбъект();
      del.Удалить();
   КонецЦикла;

   ВыборкаИзОрганизаций = Справочники.Организации.Выбрать();
   Пока ВыборкаИзОрганизаций.Следующий() Цикл
      del = ВыборкаИзОрганизаций.ПолучитьОбъект();
      del.Удалить();
   КонецЦикла;     
   
   загXML = Новый ЧтениеXML;
   загXML.ОткрытьФайл(файл);                       
   Пока загXML.Прочитать() Цикл
         Если загXML.Имя = "Организация" И загXML.ТипУзла = ТипУзлаXML.НачалоЭлемента тогда
            НовыйОбъектОрганизации = Справочник_Организации.СоздатьЭлемент();
            НовыйОбъектОрганизации.Код = загXML.ПолучитьАтрибут("Код");
            НовыйОбъектОрганизации.Наименование = загXML.ПолучитьАтрибут("Наименование");
            НовыйОбъектОрганизации.Записать();
         ИначеЕсли загXML.Имя = "Сотрудник" И загXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            НовыйОбъектСотрудника = Справочник_Сотрудники.СоздатьЭлемент();
                НовыйОбъектСотрудника.Код = загXML.ПолучитьАтрибут("Код");
            НовыйОбъектСотрудника.Наименование = загXML.ПолучитьАтрибут("Наименование");
            НовыйОбъектСотрудника.паспорт = загXML.ПолучитьАтрибут("Паспорт");           
                НовыйОбъектМестоРаботыСотрудника = НовыйОбъектСотрудника.Организации.Добавить();
            НовыйОбъектМестоРаботыСотрудника.Организация = Справочник_Организации.НайтиПоКоду(загXML.ПолучитьАтрибут("Организация"));
            НовыйОбъектКонтактыСотрудника = НовыйОбъектСотрудника.Адрес.Добавить();
            НовыйОбъектКонтактыСотрудника.адрес = загXML.ПолучитьАтрибут("Адрес");
            НовыйОбъектКонтактыСотрудника.телефон = загXML.ПолучитьАтрибут("Телефон");
            НовыйОбъектСотрудника.Записать();
         КонецЕсли;
      КонецЦикла;
   загXML.Закрыть();
   Сообщить("Завершено");
КонецПроцедуры

Dethmontt

УЖАС.......

Использовать метод менеджера справочника НайтиПоНаименованию() или НайтиПоКоду()
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Yura063

ДА хуже некуда! Вы получите данные из xml по ним ищите данные и заменяете! У вас в базе такой бардак походу! Если вам надо заменить Сотрудников и Организации то, например:

ДанныеОргНаим = ДанныеИзXML; //той организации на которую надо изменить!
Организация = Справочники.Организации;
Если Организация.НайтиПоНаименованию(ДанныеОргНаим)<> Организация.ПустаяСсылка() Тогда
    Орг = Организация.НайтиПоНаименованию(ДанныеОргНаим).ПолучитьОбъект();
    Орг.Наименование = ДанныеИзXML; // Данные организации на что меняем
    //остальные реквизиты организации
    Орг.Записать();
Иначе
    //Создаем новую организацию если это надо
КонецЕсли;

Как то так!
Помогли, отблагодари!

Dethmontt

Цитата: Yura063 от 01 апр 2013, 09:31Если Организация.НайтиПоНаименованию(ДанныеОргНаим)<> Организация.ПустаяСсылка() Тогда
    Орг = Организация.НайтиПоНаименованию(ДанныеОргНаим).ПолучитьОбъект();
    Орг.Наименование = ДанныеИзXML;

Так тоже не желательно! Зачем искать в базе два раза?
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Yura063

Да извини! В понедельник еще мозги на место не встали!  :xfbnsdfb: :)
Помогли, отблагодари!

SlazZy

я конечно всё понимаю, но зачем NULL? :)
   НовыйОбъектОрганизации = NULL;
   НовыйОбъектСотрудника = NULL;

Dethmontt

Цитата: SlazZy от 01 апр 2013, 10:03я конечно всё понимаю, но зачем NULL?
Потому что некоторые люди привыкли инициализировать переменные (пустые переменные) для работы с ними! И это правильно!
Например В T-SQL используется такой синтаксис
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск