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

Хранилище

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

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



> Загрузка из XML в 1С          
kosalex Подменю пользователя
сообщение 09.09.13, 10:29
Сообщение #1

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

Столкнулся с задаче

Столкнулся с задачей по переносу из БД в БД 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 - 09.09.13, 10:53

logist Подменю пользователя
сообщение 09.09.13, 10:53
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

ЧтениеXML.Значение


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Petre Подменю пользователя
сообщение 09.09.13, 11:30
Сообщение #3

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

Цитата(kosalex @ 09.09.13, 11:29) *
Получается считать "name"

Надо видеть весь код. Если вы циклом последовательного чтения атрибутов добрались до "name", то следующим будет "value".

Сообщение отредактировал Petre - 09.09.13, 11:31


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

kosalex Подменю пользователя
сообщение 09.09.13, 12:52
Сообщение #4

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

Процедура ЗагрузитьДанныеИзФайла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 Подменю пользователя
сообщение 09.09.13, 13:28
Сообщение #5

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

Цитата(kosalex @ 09.09.13, 13:52) *
Как записать в справочник "Вставки" так, чтобы когда становишься на записи, то в табличной части которая отображает справочник "Вставки" отображалось три вставки:

Не совсем ясен вопрос. Способ записи никак не влияет на способ отображения...


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

kosalex Подменю пользователя
сообщение 09.09.13, 13:46
Сообщение #6

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

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


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

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

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

Работате криво....

Petre Подменю пользователя
сообщение 09.09.13, 14:27
Сообщение #7

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

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


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

kosalex Подменю пользователя
сообщение 10.09.13, 8:41
Сообщение #8

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

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



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


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

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

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

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

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

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

    КонецЦикла;


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


Получилось получить ссылку. Подскажите как встать на элемент справочника по ссылке?

logist Подменю пользователя
сообщение 10.09.13, 8:49
Сообщение #9

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(kosalex @ 10.09.13, 9:41) *
Подскажите как встать на элемент справочника по ссылке?

Вытираете ноги и становитесь, в чем проблема?


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Vofka Подменю пользователя
сообщение 10.09.13, 8:50
Сообщение #10

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Цитата(logist @ 10.09.13, 9:49) *
Вытираете ноги и становитесь

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

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

Что значит "встать"?

kosalex Подменю пользователя
сообщение 10.09.13, 8:54
Сообщение #11

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

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


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



logist Подменю пользователя
сообщение 10.09.13, 9:16
Сообщение #12

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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


Сообщение отредактировал logist - 10.09.13, 9:20


Signature
Личные бесплатные консультации не даю, для этого есть форум!

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


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

 

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