Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Загрузка из XML в 1С
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
kosalex
Столкнулся с задаче

Столкнулся с задачей по переносу из БД в БД 1С. Решили переносить данные через XML файлы. Покопался в интрнете, нашёл как это сделать, но возникли трудности.

Кусок XML файла:
<row>
<field name="Артикул" value="13057010"/>
<field name="Наименование" value="ЯБЛОНЬКА К С/В ЖЕМЧ.БЕЛ"/>
<field name="ТипТМЦ" value="26000"/>
<field name="ВидНоменклатуры" value="Кольца со вставками из культивированного жемчуга"/>
<field name="Модель" size="-1"/>
<field name="Вес" value="0"/>
<field name="Группа" value="Цирконий кубический"/>
<field name="Цена" value="0.23"/>
<field name="Описание" value="Кубічний цирконій"/>
</row>
<row>
<field name="Артикул" value="13057010"/>
<field name="Наименование" value="ЯБЛОНЬКА К С/В ЖЕМЧ.БЕЛ"/>
<field name="ТипТМЦ" value="26000"/>
<field name="ВидНоменклатуры" value="Кольца со вставками из культивированного жемчуга"/>
<field name="Модель" size="-1"/>
<field name="Вес" value="0"/>
<field name="Группа" value="Жемчуг (шт.)"/>
<field name="Цена" value="0.37"/>
<field name="Описание" value="Перли к.пр.б.:Нб-5,0-5,5"/>
</row>
<row>
<field name="Артикул" value="13057010"/>
<field name="Наименование" value="ЯБЛОНЬКА К С/В ЖЕМЧ.БЕЛ"/>
<field name="ТипТМЦ" value="26000"/>
<field name="ВидНоменклатуры" value="Кольца со вставками из культивированного жемчуга"/>
<field name="Модель" size="-1"/>
<field name="Вес" size="-1"/>
<field name="Группа" value="Жемчуг (шт.)"/>
<field name="Цена" value="0.23"/>
<field name="Описание" value="Перли к.пр.б.:Нб-4,0-4,5"/>
</row>



Получается считать "name":
Имя = ЧтениеXML.Имя;



Как прочитать value?


 ! 

Правила, п.4
 
logist
ЧтениеXML.Значение
Petre
Цитата(kosalex @ 09.09.13, 11:29) необходимо зарегистрироваться для просмотра ссылки
Получается считать "name"

Надо видеть весь код. Если вы циклом последовательного чтения атрибутов добрались до "name", то следующим будет "value".
kosalex
Процедура ЗагрузитьДанныеИзФайлаXML(Файл)
//Здесь обработчики закгрузки справочников    
ПутьКФайлу = Файл[0];
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);

СЗ = Новый СписокЗначений;

Пока ЧтениеXML.Прочитать() Цикл
     Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "field" Тогда
        //Чтение атрибутов узла
        Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
             Атрибут = ЧтениеXML.Значение;
                Если ЧтениеXML.Имя = "value" или ЧтениеXML.Имя = "size" Тогда
                СЗ.Добавить(Атрибут);
                КонецЕсли;
                
        КонецЦикла;
    КонецЕсли;
    
    Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента и ЧтениеXML.Имя = "row" Тогда
    СоздатьЭлементСправочника(СЗ);
    СЗ.Очистить();
    КонецЕсли;
КонецЦикла;

    
КонецПроцедуры

Процедура СоздатьЭлементСправочника(СЗ)
    НовыйЭлемент = Справочники.ТМЦ.СоздатьЭлемент();
    НовыйЭлемент.Артикул = СЗ[0].Значение;
    НовыйЭлемент.Наименование = СЗ[1].Значение;
    НовыйЭлемент.ТипТМЦ = СЗ[2].Значение;
    НовыйЭлемент.ВидНоменклатуры = СЗ[3].Значение;
    НовыйЭлемент.Модель = СЗ[4].Значение;
    НовыйЭлемент.СреднийВес = СЗ[5].Значение;
    //НовыйЭлемент. = СЗ[6].Значение;
    //НовыйЭлемент.Стоимость = СЗ[7].Значение;
    НовыйЭлемент.Описание = СЗ[8].Значение;
    НовыйЭлемент.ГруппаАпробирки = "2";
    НовыйЭлемент.ЦветМеталла = "Красный";
    НовыйЭлемент.Материал = "Золото";
    НовыйЭлемент.Записать();
КонецПроцедуры



Работает вроде как надо.Из куска xml файла который выше, у меня есть справочник ТМЦ и справочник Вставки. В справочнике ТМЦ находятся изделия, а справочнике вставки(камни) к нему. Вот эта запись их XML файла <field name="Описание" value="Перли к.пр.б.:Нб-5,0-5,5"/> является вставкой.
Как записать в справочник "Вставки" так, чтобы когда становишься на записи, то в табличной части которая отображает справочник "Вставки" отображалось три вставки:
1) <field name="Описание" value="Кубічний цирконій"/>, 
2) <field name="Описание" value="Перли к.пр.б.:Нб-5,0-5,5"/>,
3) <field name="Описание" value="Перли к.пр.б.:Нб-4,0-4,5"/>.
Petre
Цитата(kosalex @ 09.09.13, 13:52) необходимо зарегистрироваться для просмотра ссылки
Как записать в справочник "Вставки" так, чтобы когда становишься на записи, то в табличной части которая отображает справочник "Вставки" отображалось три вставки:

Не совсем ясен вопрос. Способ записи никак не влияет на способ отображения...
kosalex
Цитата(Petre @ 09.09.13, 14:28) необходимо зарегистрироваться для просмотра ссылки
Не совсем ясен вопрос. Способ записи никак не влияет на способ отображения...


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

Я читаю файл и заношу в СписокЗначений то что прочитал, когда собираюсь читать следующее изделие, то как понять что следующее изделие уже есть и в справочник изделий его добавлять не нужно, нужно только добавить к нему вставку.

После того как записал в СЗ данные по изделию и создал новый элемент справочника, я не очищаю СЗ. Начинаю читать следующее изделие, если артикул с файла равен артикулу с СЗ, тогда нужно прочитать и взять только поле "Описание" и создать запись нового элемента справочника Вставки.

Работате криво....
Petre
Очевидно, нужен ключ (идентификатор) не только для справочника "тмц", но и для справочника "вставки". Если для "тмц" таким ключом служит "артикул", то необходимо что-то аналогичное выгружать и для "вставок". Для дальнейшего поиска уже созданных элементов сз, имхо, не очень подходящая коллекция, т. к. должна содержать ключ и ссылку. Если ключ соответствует правилам именования переменных для 1с, удобнее использовать структуру, если нет - соответствие. В особо тяжелых случаях можно использовать тз.
kosalex
Цитата(Petre @ 09.09.13, 15:27) необходимо зарегистрироваться для просмотра ссылки
Очевидно, нужен ключ (идентификатор) не только для справочника "тмц", но и для справочника "вставки". Если для "тмц" таким ключом служит "артикул", то необходимо что-то аналогичное выгружать и для "вставок". Для дальнейшего поиска уже созданных элементов сз, имхо, не очень подходящая коллекция, т. к. должна содержать ключ и ссылку. Если ключ соответствует правилам именования переменных для 1с, удобнее использовать структуру, если нет - соответствие. В особо тяжелых случаях можно использовать тз.



Я читаю XML файл и записываю в СЗ. Т.е. из этого куска XML получается вот такой СЗ:


Как видно из XML дальше едёт такое же изделие, но только в "Описание" уже другая вставка(камень).
Делаю запрос к справочнику "ТМЦ" и если артикул элемента в справочнике равен артикулу с XML файла, тогда берём новую вставку, добавляем её в справочник "Вставки" и привязываем новую вставку к уже имеющемуся изделию в справочнике "ТМЦ".

Запрос к справочнику ТМЦ:
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТМЦ.Ссылка
        |ИЗ
        |    Справочник.ТМЦ КАК ТМЦ
        |ГДЕ
        |    ТМЦ.Артикул = &Артикул";

    Запрос.УстановитьПараметр("Артикул", Артикул);

    Результат = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        //В ВыборкаДетальныеЗаписи находится информация о изделии из файла XML которое уже записано в справочник "ТМЦ", только в это изделие вставлена другая //вставка.
        //Нужно записать вставку из "СЗ1" в спавочник "Вставки" и указать связь к имеиющимуся изделию в справочнике "ТМЦ",

    КонецЦикла;


Не выбирается ссылка на уже записанный ранее элемент справочника "ТМЦ". Как встать на этот элемент?


Получилось получить ссылку. Подскажите как встать на элемент справочника по ссылке?
logist
Цитата(kosalex @ 10.09.13, 9:41) необходимо зарегистрироваться для просмотра ссылки
Подскажите как встать на элемент справочника по ссылке?

Вытираете ноги и становитесь, в чем проблема?
Vofka
Цитата(logist @ 10.09.13, 9:49) необходимо зарегистрироваться для просмотра ссылки
Вытираете ноги и становитесь

Можно ноги не вытирать. Элемент справочника стерпит все... smile.gif

Цитата(kosalex @ 10.09.13, 9:41) необходимо зарегистрироваться для просмотра ссылки
как встать на элемент справочника по ссылке?

Что значит "встать"?
kosalex
Цитата(logist @ 10.09.13, 9:49) необходимо зарегистрироваться для просмотра ссылки
Вытираете ноги и становитесь, в чем проблема?


Есть ссылка на уже записанный элемент справочника(из запроса). Нужно открыть эту запись справочника "ТМЦ" и добавить в табличную часть вставку(камень) из справочника "Вставки".


logist
ОбъектСпр = Ссылка.ПолучитьОбъект();
СтрокаТЧ = ОбъектСпр.Табчасть.Добавить();
СтрокаТЧ.ИмяРеквизита = НовоеЗначениеРеквизита;
ОбъектСпр.Записать();
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.