Как записать из Xml в справочник номенклатур?

Тема в разделе "1C и всё что с ней связано", создана пользователем arrio, 13 фев 2009.

  1. arrio

    arrio Гость

    Есть шаблон для чтения произвольного xml файл (в нем 2 поля -код - значение). Мне нужно записать полученные данные в справочник Номенклатур? Какой код должен быть в коце для записи в Справочник.Номенклатура?
    На экран я получаю выход вида:


    --COL
    --DATA
    Текст:3249
    --Конец:DATA
    --Конец:COL
    --COL
    --DATA
    Текст:11370
    --Конец:DATA
    --Конец:COL

    На последние 2 строчки (если снимаю комментарии) мне выдает, что значение не является значением объектного типа Справочники..



    ПутьКФайлу="d:\1C-Filemak\zak_elem.xml" ;
    Чтение.ОткрытьФайл(ПутьКФайлу);
    Пока Чтение.Прочитать() Цикл // Прочитать «структурные части» элементов.
    // Проверить, какая часть элемента – текущая.
    Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
    ИмяУзла = Чтение.Имя;
    Сообщить("--" + ИмяУзла);
    // Атрибуты элементов можно читать только если текущая часть – начало элемента
    Пока Чтение.ПрочитатьАтрибут() Цикл
    // Прочитать данные узла атрибута.
    ТипУзла = Чтение.ТипУзла;
    Имя = Чтение.Имя;
    Значение = Чтение.Значение;
    КонецЦикла;
    ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
    Сообщить("Текст:" + Чтение.Значение);
    // ЗагруженныйОбъект="Чтение.Значение";
    // ЗагруженныйОбъект.Справочники.Номенклатура.Записать();
     
  2. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Гм. Чтение.Значение - это что, имя? Тогда примерно так

    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Если Спр.НайтиПоНаименованию(Чтение.Значение,0) = 1 Тогда//Проверить, есть ли такой
    Спр.Новый();
    Спр.Наименование = Чтение.Значение;
    Спр.Записать();
    Иначе
    Сообщить("Наименование "+ СокрЛП(Чтение.Наименование) +" присутствует в номенклатуре");
    КонецЕсли;
    кстати - не видно конца первого цикла.
    ЗагруженыйОбъект - это что, переменная?
     
  3. arrio

    arrio Гость

    Да, ЗагруженныйОбъект - это переменная, и в ней я хочу видеть значения типа Текст:11370 и т.п.
    А хачем мне создавать объект Справыочник.Номенклатура, если в конФИГУРАЦИИ итак уже есть Справочник.Нменклатура?
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    СоздатьОбъект() - это не создание справочника, а присвоение переменной Спр ссылки на объект конфигурации Справочник.Номенклатура.
    Иначе получается, что ты пытаешся определить переменной непонятное свойство Справочники.Номенклатура - которого у него тупо нет - это ведь просто текст.
     
  5. arrio

    arrio Гость

    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Если Спр.НайтиПоНаименованию(Чтение.Значение,0) = 1 Тогда//Проверить, есть ли такой
    Спр.Новый();
    Спр.Наименование = Чтение.Значение;
    Спр.Записать();
    Иначе
    Сообщить("Наименование "+ СокрЛП(Чтение.Наименование) +" присутствует в номенклатуре");
    КонецЕсли;

    Понятно. Спр - это ссылка.. Вставил этот код вместо последних двух комментариев - ошибка{ВнешняяОбработка.импортXML(30,9)}: Процедура или функция с указанным именем не определена (СоздатьОбъект)
    Спр = <<?>>СоздатьОбъект("Справочник.Номенклатура");
     
  6. b00tch

    b00tch Гость

    скорее так:
    Код (Text):
    Спр = Справочники.Номенклатура.СоздатьЭлемент();
    это ж в0сьмерка, насколько я понял?
     
  7. arrio

    arrio Гость

    Ну да, 8.0. В итоге

    // Прочитать данные узла атрибута.
    ТипУзла = Чтение.ТипУзла;
    Имя = Чтение.Имя;
    Значение = Чтение.Значение;


    Сообщить("Текст:" + Чтение.Значение);
    Спр = Справочники.Номенклатура.СоздатьЭлемент();
    ЗначениеРеквизита1=Имя.Значение;
    ЗначениеРеквизита2=Чтение.Значение;
    спр.Реквизит1 = ЗначениеРеквизита1;
    спр.Реквизит2 = ЗначениеРеквизита2;
    спр.Записать();

    Выдает

    {ВнешняяОбработка.импортXML(40)}: Значение не является значением объектного типа (Значение)
    по причине:
    {ВнешняяОбработка.импортXML(40)}: Значение не является значением объектного типа (Значение)
     
  8. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Пардон, я семерочник , подтупил малость :(
     
  9. b00tch

    b00tch Гость

    переменная Имя не определена... либо Чтение.Имя, либо читать след. узел (если таковой есть) и присваивать его значение...
     
  10. arrio

    arrio Гость

    да, проблема в этом. уфф.... че-то получилось... итоговый код:

    ИначеЕсли Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
    // В примере просто выводим текст в окно сообщений.
    Сообщить("Текст:" + Чтение.Значение);

    Сообщить("Текст:" + Чтение.Значение);

    Объект = Справочники.Номенклатура.СоздатьЭлемент();
    Объект.Реквизит1 = Имя; //код номенклатуры
    Объект.Реквизит2 = Значение; //значение
    Объект.Записать();

    правда, теперь в справочнике номенклатур где реквизит ИМЯ (реквизит1) у меня веззьде значение RecordID.
    Подскажите, а какой код нужен, чтобы сделать проверку на наличие реквизита2 в справочнике номенклатур, и, если его там нет, то создание?
     
Загрузка...

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