Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 окт 2021, 15:28

Загрузка из xml и создание номенклатуры.

Автор Алексей25, 11 мая 2017, 11:15

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

Алексей25

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

Выгружаю так

Если Модифицированность Тогда
    Записать();
КонецЕсли;

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Users\Андрей\Desktop\"+Объект.Номер+".xml");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Корневой");
Данные = Объект.Ссылка.ПолучитьОбъект();
ЗаписатьXML(ЗаписьXML,Данные);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();


И загружаю так

Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
Фильтр = "XML(*.xml)|*.xml";                 
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
Массив = Новый Массив();
Если ДиалогОткрытияФайла.Выбрать() Тогда
Состояние(,,"Загрузка настроек...");
ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
ЧтениеXML=Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл(ИмяФайла);
// Текущим становится элемент Root.
ЧтениеXML.Прочитать();
// Текущим становится элемент с документом.
ЧтениеXML.Прочитать();
// Проверить сможет ли с данным значением "справиться" система сериализации в данной базе.
Если ВозможностьЧтенияXML(ЧтениеXML) Тогда
                    ДокументОбъект.ПоступлениеТовара;
         ЗагружаемыйОбъект=ПрочитатьXML(ЧтениеXML);
     ЗагружаемыйОбъект.Записать();
КонецЕсли;
ЧтениеXML.Закрыть();   
КонецЕсли;

depb

Вставляешь условие при загрузке.


Если Не ЗначениеЗаполнено(Номенклатура) Тогда
спрНоменклатура = Справочники.Номенклатура;
НоваяНоменклатура = спрНоменклатура.СоздатьЭлемент();
НоваяНоменклатура.Наименование = ТвоеИмя;
НоваяНоменклатура.Записать();

КудаВставитьНоменлктару = НоваяНоменклатура;
КонецЕсли;

ilyay

Нужно с тем же уникальным идентификатором создавать!

Алексей25

Цитата: ilyay от 11 мая 2017, 12:17
Нужно с тем же уникальным идентификатором создавать!

А как это сделать?

ilyay

Вот так, например:

Об = Справочники.Номенклатура.СоздатьЭлемент();
УИД = СсылкаНоменклатурыИзXML.УникальныйИдентификатор();
НоваяСсылка = Справочники.Номенклатура.ПолучитьСсылку(УИД);
Об.УстановитьСсылкуНового(НоваяСсылка);
Об.Наименование = "Создана по идентификатору "+Строка(УИД);
Об.Записать();


Тогда можно создать номенклатуру после загрузки xml.
Определить, что нужно создавать, можно запросом с левым соединением справочника номенклатуры.
Где NULL будет вместо ссылки номенклатуры, там и нужно создавать.

А можно ничего не делать, а после загрузки запустить тестирование и исправление с указанием создавать элементы, на которые есть ссылки, но которые отсутствуют в базе.

Dethmontt

Цитата: ilyay от 11 мая 2017, 12:31А можно ничего не делать, а после загрузки запустить тестирование и исправление с указанием создавать элементы, на которые есть ссылки, но которые отсутствуют в базе.

Мне вот этот способ понравился!!! +1
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Алексей25

Цитата: ilyay от 11 мая 2017, 12:31УИД = СсылкаНоменклатурыИзXML.УникальныйИдентификатор();

Цепляется к этой строке, пишет, что переменная не определена.

ilyay

Смотреть на название переменной и думать, думать... :befhbt:
Думать про ссылку в реквизите объекта с типом номенклатура в xml.

Dethmontt

Цитата: Алексей25 от 12 мая 2017, 09:17что переменная не определена.

аяй-аяй-яй... Какая гадская эта 1С...
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Теги:

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

68372

Ответов: 1
Просмотров: 970

76859

Ответов: 6
Просмотров: 388

15260

Ответов: 5
Просмотров: 3319

16335

Ответов: 7
Просмотров: 6307

Рейтинг@Mail.ru Rambler's Top100

Поиск